Notice. New forum software under development. It's going to miss a few functions and look a bit ugly for a while, but I'm working on it full time now as the old forum was too unstable. Couple days, all good. If you notice any issues, please contact me.
|
Forum Index : Microcontroller and PC projects : datatype of CTRLVAL() if numeric ?
Author | Message | ||||
ville56 Regular Member Joined: 08/06/2022 Location: AustriaPosts: 68 |
2nd try, now in the proper forum .... mea culpa, mea maxima culpa! I'm trying to read a float value from a NUMBERBOX via the CTRLVAL() statement. If i enter 89.9 in the numberbox, a PRINT CTRLVAL() returns 89.90000153. This seems to be in contrast to an assignment like i=val("89.9"), i being declared as float datatype, which gives 89.9 on "print i". Is there a lower (single?) precision for the internal representation/conversion of CTRLVAL than for normal float variables or do i something wrong ? Any clarification is welcome Regards, Gerald 73 de OE1HGA, Gerald |
||||
TassyJim Guru Joined: 07/08/2011 Location: AustraliaPosts: 5883 |
That's floating point (IEEE 754) for you. PRINT STR$(....) will display it in whatever resolution you desire. You have to take precautions if you are checking for equality. Jim VK7JH MMedit MMBasic Help |
||||
ville56 Regular Member Joined: 08/06/2022 Location: AustriaPosts: 68 |
Thanks for the info about float format, Jim. But there ist still something strange for me. I've tried the following: dim float i i=89.9 print i Result is: 89.9 and what i expected it to be. --- but --- 'gui components are defined somewhere upfront ctrlval(#1)=89.9 print ctrlval(#1) Result is: 89.90000153 this seems like 32 bit representation ... unusable for my problem. Same behavior if you enter the number via the touchpad. So there is appearantly some inherent difference in assigning a numeric value to a 'normal' float variable and the assignment of the value to the ctrlval() command. Variables seem to be 64 bit, ctrlval() assignments seem to be 32 bit, be it direct assignment as in my example or assignment via the touch entry. What i want to know is, is there a way to have 64 bit resolution for touch input of float numbers, or why there is currently no 64 bit resolution for that. Thanks, Gerald 73 de OE1HGA, Gerald |
||||
Mixtel90 Guru Joined: 05/10/2019 Location: United KingdomPosts: 5705 |
Nasty, unpredictable things, floats. Do everything in integers and just multiply/divide them by powers of 10. ;) Better still, do everything in binary or, if you must, HEX. :) >**** ERROR *** REBOOT UNIVERSE TO CONTINUE *** More seriously, I rather suspect that the GUI commands might be taken pretty much as they are from the 32-bit MMBasic systems. They may not handle 64-bit values properly and could be ignoring the upper bits. I've not used them much so I can't offer any practical experience. Mick Zilog Inside! nascom.info for Nascom & Gemini Preliminary MMBasic docs & my PCB designs |
||||
thwill Guru Joined: 16/09/2019 Location: United KingdomPosts: 3831 |
More like "Click [OK] to reboot universe" and then not show any buttons ... or worse yet not show a [Cancel] button. Best wishes, Tom Game*Mite, CMM2 Welcome Tape, Creaky old text adventures |
||||
ville56 Regular Member Joined: 08/06/2022 Location: AustriaPosts: 68 |
hmmm ... seems to be a break in the floating point arithmetics architecture of MMBasic on the pico. I'm not a big fan of floating arithmetics anyway, do whatever i can in integer. Had a lot of "bad" experiance with rounding errors in my 'industrial' live, long time ago, programming realtime process control. Later in my 'banking' live, integers where almost the only way to do it. So i have to revert to integers, or maybe strings... Reset Universe? O Yes O No X Not sure Thanks to all, Gerald 73 de OE1HGA, Gerald |
||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 8567 |
The PicoMite uses floats for GUI operations to save memory - 16 bytes per control. I'll change the formatting to fix the issue in the next 5.07.07 beta |
||||
ville56 Regular Member Joined: 08/06/2022 Location: AustriaPosts: 68 |
Peter, thank you. This will make things easier for me. Regards, Gerald 73 de OE1HGA, Gerald |
||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 8567 |
Please check V5.07.07b7 just posted to see if it works - thanks |
||||
ville56 Regular Member Joined: 08/06/2022 Location: AustriaPosts: 68 |
Just tried V5.07.07b7, no change in behavior. Regards, Gerald 73 de OE1HGA, Gerald |
||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 8567 |
Can you post your program or a simple demo program so I can test Edited 2023-01-21 02:54 by matherp |
||||
ville56 Regular Member Joined: 08/06/2022 Location: AustriaPosts: 68 |
created 2 progs - gui-1.bas shows the difference between storing a value in a float variable vs ctrlval() which should behave the same. A typical value where the difference shows up is 89.9 - gui-2.bas lets you enter a value into a numberbox and prints it. If you enter 89.9 you get the same difference as shown in gui-1.bas Both examples point, in my opinion, to differences in the internal representation of floating point numbers (variable vs. gui subsystem) guitest.zip Hope this shows what my problem is. Reagrds, Gerald 73 de OE1HGA, Gerald |
||||
Print this page |