# PureBasic Forum

 It is currently Wed Dec 11, 2019 3:45 pm

 All times are UTC + 1 hour

 Page 1 of 1 [ 2 posts ]
 Print view Previous topic | Next topic
Author Message
 Post subject: PB562 More problems in mixing floats with integersPosted: Fri Feb 22, 2019 12:28 pm
 Addict

Joined: Wed Aug 31, 2005 11:09 pm
Posts: 3695
Location: Italy
Original thread viewtopic.php?f=7&t=72322

Problem

Code:
Global.l x = 100

If x < 1.0*1
Debug "x < 1.0*1" ; no printing, OK
EndIf
If x < 1.1*1
Debug "x < 1.1*1" ; it prints "x < 1.1*1", so 100 is less then 1.1 !!! NOT OK
EndIf

Testing

Code:
Global.l x = 100

; to verify what's happening, let's assign 1.1000000000000001 to a float (1.1000000000000001 is the nearest float to 1.01)

flo.f = 1.1000000000000001

; the hexadecimal value stored in a float var to represent 1.1000000000000001 is \$3F8CCCCD

Debug "flo.f = " + Hex(PeekL(@flo.f)) ; 3F8CCCCD

; the generated asm for the test code above is

EnableASM

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 "x < 1.0*1" ; and this is skipped

; 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
; 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 float

; 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

CMP    ebx,eax ; compares that to 100

JGE   _EndIf4 ; now ebx - eax (100 - \$3F8CCCCD) is not greater than zero so ...

Debug "x < 1.1*1" ; it falls into this, NOT OK !!!
; EndIf
!_EndIf4:
DisableASM

It's a variation on this theme -> viewtopic.php?f=4&t=59422

_________________

Top

 Post subject: Re: PB562 More problems in mixing floats with integersPosted: Tue May 14, 2019 8:17 pm
 Addict

Joined: Tue Dec 23, 2003 3:54 am
Posts: 1687
Definitely a bug, and thank you for investigating it.

Bugs like this in fundamental features like type casting worry me the most!

_________________
On GitHub: PB Includes - IDE Tools - Color Themes

Top

 Display posts from previous: All posts1 day7 days2 weeks1 month3 months6 months1 year Sort by AuthorPost timeSubject AscendingDescending
 Page 1 of 1 [ 2 posts ]

 All times are UTC + 1 hour

#### Who is online

Users browsing this forum: No registered users and 4 guests

 You cannot post new topics in this forumYou cannot reply to topics in this forumYou cannot edit your posts in this forumYou cannot delete your posts in this forum

Search for:
 Jump to:  Select a forum ------------------ PureBasic    Coding Questions    Game Programming    3D Programming    Assembly Programming    The PureBasic Editor    The PureBasic Form Designer    General Discussion    Feature Requests and Wishlists    Tricks 'n' Tips Bug Reports    Bugs - Windows    Bugs - Linux    Bugs - Mac OSX    Bugs - Documentation OS Specific    AmigaOS    Linux    Windows    Mac OSX Miscellaneous    Announcement    Off Topic Showcase    Applications - Feedback and Discussion    PureFORM & JaPBe    TailBite

Powered by phpBB © 2008 phpBB Group
subSilver+ theme by Canver Software, sponsor Sanal Modifiye