For me, zero is #False and everything else is #True
Code: Select all
Debug Bool (Not 0.4)
Debug Bool (Not 0.5)
If 1.0/2
Debug "#True"
Else
Debug "#False"
EndIf
If 1.0/3
Debug "#True"
Else
Debug "#False"
EndIf
Code: Select all
Debug Bool (Not 0.4)
Debug Bool (Not 0.5)
If 1.0/2
Debug "#True"
Else
Debug "#False"
EndIf
If 1.0/3
Debug "#True"
Else
Debug "#False"
EndIf
Code: Select all
Define.d x,y
Define.i ix,iy
x = 1.0 / 2
y = 1.0 / 3
Debug "-- Doubles assigned a Double --"
If x
Debug "F:1/2 = True"
Else
Debug "F:1/2 = False"
EndIf
If Bool(x)
Debug "BF:1/2 = True"
Else
Debug "BF:1/2 = False"
EndIf
If y
Debug "F:1/3 = True"
Else
Debug "F:1/3 = False"
EndIf
If Bool(y)
Debug "BF:1/3 = True"
Else
Debug "BF:1/3 = False"
EndIf
Debug "-- Integers assigned a Double --"
ix = 1.0 / 2
iy = 1.0 / 3
If ix
Debug "I:1.0/2 = True"
Else
Debug "I:1.0/2 = False"
EndIf
If Bool(ix)
Debug "BI:1.0/2 = True"
Else
Debug "BI:1.0/2 = False"
EndIf
If iy
Debug "I:1.0/3 = True"
Else
Debug "I:1.0/3 = False"
EndIf
If Bool(iy)
Debug "BI:1.0/3 = True"
Else
Debug "BI:1.0/3 = False"
EndIf
Debug "-- Integers assigned an Integer --"
ix = 1 / 2
iy = 1 / 3
If ix
Debug "I:1/2 = True"
Else
Debug "I:1/2 = False"
EndIf
If Bool(ix)
Debug "BI:1/2 = True"
Else
Debug "BI:1/2 = False"
EndIf
If iy
Debug "I:1/3 = True"
Else
Debug "I:1/3 = False"
EndIf
If Bool(iy)
Debug "BI:1/3 = True"
Else
Debug "BI:1/3 = False"
EndIf
; -- Doubles assigned a Double --
; F:1/2 = True
; BF:1/2 = True
; F:1/3 = True
; BF:1/3 = True
; -- Integers assigned a Double --
; I:1.0/2 = True
; BI:1.0/2 = True
; I:1.0/3 = False
; BI:1.0/3 = False
; -- Integers assigned an Integer --
; I:1/2 = False
; BI:1/2 = False
; I:1/3 = False
; BI:1/3 = False
No, strictly speaking, in Boolean algebra True is True and False is False, and neither is a number. But when programming, just like integers and floats these values get 'cast' into binary which can be stored in a register.Josh wrote:For me, zero is #False and everything else is #True
Think about each part of the statement individually as language not code - there's an underlying logic error.Josh wrote:Can anyone explain why the evaluation of If and Bool float values are rounded?
This one is more difficult to explain but the problem stems from a similar root cause - falling foul of casting.skywalk wrote:I am sort of confused?
Code: Select all
; Debug "-- Integers assigned a Double --"
; ix = 1.0 / 2
MOV qword [v_ix],1
; iy = 1.0 / 3
MOV qword [v_iy],0
; Debug "-- Integers assigned an Integer --"
; ix = 1 / 2
MOV qword [v_ix],0
; iy = 1 / 3
MOV qword [v_iy],0
Code: Select all
Define.d x,y, divisor2, divisor3
Define.i ix,iy, idivisor2, idivisor3
divisor2 = 2
divisor3 = 3
idivisor2 = 2
idivisor3 = 3
Debug "-- Integers assigned a Double constant --"
ix = 1.0 / 2
iy = 1.0 / 3
If ix
Debug "I:1.0/2 = True"
Else
Debug "I:1.0/2 = False"
EndIf
If Bool(ix)
Debug "BI:1.0/2 = True"
Else
Debug "BI:1.0/2 = False"
EndIf
If iy
Debug "I:1.0/3 = True"
Else
Debug "I:1.0/3 = False"
EndIf
If Bool(iy)
Debug "BI:1.0/3 = True"
Else
Debug "BI:1.0/3 = False"
EndIf
Debug "-- Integers assigned a Double variable --"
ix = 1.0 / divisor2
iy = 1.0 / divisor3
If ix
Debug "I:1.0/2 = True"
Else
Debug "I:1.0/2 = False"
EndIf
If Bool(ix)
Debug "BI:1.0/2 = True"
Else
Debug "BI:1.0/2 = False"
EndIf
If iy
Debug "I:1.0/3 = True"
Else
Debug "I:1.0/3 = False"
EndIf
If Bool(iy)
Debug "BI:1.0/3 = True"
Else
Debug "BI:1.0/3 = False"
EndIf
Debug "-- Integers assigned a Double variable --"
ix = 1.0 / idivisor2
iy = 1.0 / idivisor3
If ix
Debug "I:1.0/2 = True"
Else
Debug "I:1.0/2 = False"
EndIf
If Bool(ix)
Debug "BI:1.0/2 = True"
Else
Debug "BI:1.0/2 = False"
EndIf
If iy
Debug "I:1.0/3 = True"
Else
Debug "I:1.0/3 = False"
EndIf
If Bool(iy)
Debug "BI:1.0/3 = True"
Else
Debug "BI:1.0/3 = False"
EndIf
; -- Integers assigned a Double constant --
; I:1.0/2 = True
; BI:1.0/2 = True
; I:1.0/3 = False
; BI:1.0/3 = False
; -- Integers assigned a Double variable --
; I:1.0/2 = False
; BI:1.0/2 = False
; I:1.0/3 = False
; BI:1.0/3 = False
; -- Integers assigned a Double variable --
; I:1.0/2 = False
; BI:1.0/2 = False
; I:1.0/3 = False
; BI:1.0/3 = False
Code: Select all
q.q = 2
d.d = 2.1
;Example with variables
Debug Bool (q = d) ; 1
Debug Bool (d = q) ; 0
;Same example with literals
Debug Bool (2 = 2.1) ; 0.0 (since when is a boolean value a float)
Debug Bool (2.1 = 2) ; 0.0
Code: Select all
; Example with variables
Debug Bool(0.0 + q = d) ; 1
Debug Bool(0.0 + d = q) ; 0
; Example with literals
Debug Bool(0.0 + 2 = 2.1) ; 0.0 (since when is a boolean value a float)
Debug Bool(0.0 + 2.1 = 2) ; 0.0