PureBasic Forumhttp://forums.purebasic.com/english/ [Done] PB562 More problems in mixing floats with integershttp://forums.purebasic.com/english/viewtopic.php?f=4&t=72339 Page 1 of 1

 Author: luis [ Fri Feb 22, 2019 12:28 pm ] Post subject: [Done] PB562 More problems in mixing floats with integers Original thread viewtopic.php?f=7&t=72322ProblemCode:Global.l x = 100; to verify what's happening, let's assign 1.1000000000000001 to a float (1.1000000000000001 is the nearest double to 1.10)flo.f = 1.1000000000000001 ; it is converted to the float 1.10000002384186Debug flo ; 1.10000002384186 ; the hexadecimal value stored in a float var to represent 1.10000002384186 is \$3F8CCCCDDebug "flo.f = " + Hex(PeekL(@flo.f)) ; \$3F8CCCCD; the generated asm for the test code above isEnableASM  MOV    dword [v_x],100; If x < 1.0*1  MOV    ebx,dword [v_x] ; copy 100 to ebx; now the compiler "optimizes" the 1.0 * 1 to 1.; it should keep the zero and consider the expression as float treating the data accordingly  MOV    eax,1 ; it stores 1 in eax   CMP    ebx,eax ; and then compare that to 100  JGE   _EndIf2: ; now ebx - eax (100 - 1) is greater than 0, so it jumps    Debug Str(x) + " is < 1.0*1" ; and this is skipped, OK; EndIf!_EndIf2:; If x < 1.1*1  MOV    ebx,dword [v_x] ; copy 100 to ebx ; again the compiler optimize the 1.1 * 1 to 1.1000000000000001 using a double; this time it does the right thing (so it does two different things for 1.0 and 1.1, a problem in itself ...); but in any case insists in not treating the data as floating point value  ; it stores \$3F8CCCCD in EAX and then treat that as an integer in the comparison (so basically the 1.1 becomes garbage)  MOV    eax,1.1000000000000001 ; the double is converted to the float 1.10000002384186, and from there to \$3F8CCCCD    CMP    ebx,eax ; compares that to 100  JGE   _EndIf4 ; now ebx - eax (100 - \$3F8CCCCD) is not greater than zero so ...  Debug Str(x) + " is < 1.1*1" ; it falls into this, NOT OK !!!; EndIf!_EndIf4:DisableASMIt's a variation on this theme -> viewtopic.php?f=4&t=59422edit: comments

 Author: kenmo [ Tue May 14, 2019 8:17 pm ] Post subject: Re: PB562 More problems in mixing floats with integers Definitely a bug, and thank you for investigating it.Bugs like this in fundamental features like type casting worry me the most!

 Author: Fred [ Wed Jan 29, 2020 10:34 pm ] Post subject: Re: [Done] PB562 More problems in mixing floats with integer Fixed.

 Page 1 of 1 All times are UTC + 1 hour Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Grouphttp://www.phpbb.com/