Page 1 of 1

The "100 < 1.1*1" problem

Posted: Wed Feb 20, 2019 6:31 pm
by AtomUpgrader

Code: Select all

Global.L x
x = 100
If x < 1.0*1
    Debug "100 < 1.0*1"
Endif
If x < 1.1*1
    Debug "100 < 1.1*1"
Endif
Please give out your results!

Re: The "100 < 1.1*1" problem

Posted: Wed Feb 20, 2019 7:11 pm
by skywalk
Not gonna lie, this is a pain in the A$$! :evil:
However, it is rare, that the inequality is formed without variables... :wink:

Code: Select all

Global.L x = 100
Global.d y = 1.0
Global.d z = 1.1
If x < (y)
  Debug "BAD!  100 < y"
EndIf
If x < (z)
  Debug "BAD!  100 < z"
EndIf
If x < (1.0)
  Debug "BAD!  100 < 1.0"
EndIf
If x < (1.1)
  Debug "BAD!  100 < 1.1"
EndIf
If x < (1.0 * 1)
  Debug "BAD!  100 < 1.0 * 1"
EndIf
If x < (1.1 * 1)
  Debug "BAD!  100 < 1.1 * 1"
EndIf

Re: The "100 < 1.1*1" problem

Posted: Wed Feb 20, 2019 10:01 pm
by Dude
I get "100 < 1.1*1" outputted with the code as it stands.

But I get no outputs at all if I use "Global.f x" which is how it's meant to be. If you're going to use float calculations ("1.1*1") then the variable holding the result must also be of float type (not long type). Make "x" a float and you'll see that it works.

Re: The "100 < 1.1*1" problem

Posted: Wed Feb 20, 2019 10:28 pm
by NicTheQuick
Looks for me like a bug. Purebasic has to handle type conversions properly without explicit casting. If you write the following it works properly.

Code: Select all

Global.L x = 100
If x < Int(1.1 * 1)
  Debug "BAD!  100 < 1.1 * 1"
EndIf
There other way around it also works

Code: Select all

Global.L x = 100
If Abs(x) < 1.1 * 1
  Debug "BAD!  100 < 1.1 * 1"
EndIf
All together:

Code: Select all

Global.i x = 100

If x < 1.1 * 1
  Debug "BAD!  100 < 1.1 * 1"
EndIf

If x < Int(1.1 * 1)
	Debug "BAD!  100 < Int(1.1 * 1)"
EndIf

If Abs(x) < 1.1 * 1
	Debug "BAD!  Abs(100) < 1.1 * 1"
EndIf

Re: The "100 < 1.1*1" problem

Posted: Tue May 14, 2019 12:58 pm
by luis
@AtomUpgrader

Reported it here -> viewtopic.php?f=4&t=72339&p=533241#p533241

Re: The "100 < 1.1*1" problem

Posted: Tue May 14, 2019 4:09 pm
by Michael Vogel
Would be fine if Fred could provide some simple casting functions...

Code: Select all

Macro Integer(value)
	Int((value))
EndMacro
Macro Float(value)
	1.0*(value)	
EndMacro

Global.i x
x = 100
If x < 1.0*1
	Debug "100 < 1.0*1"
EndIf
If x < 1.1*1
	Debug "100 < 1.1*1"
EndIf
If x < Integer(1.1*1)
	Debug "100 < 1.1*1"
EndIf
If Float(x) < 1.1*1
	Debug "100 < 1.1*1"
EndIf