如果语句不被视为布尔值?
If statements not treated as boolean?
我是学生,我的软件老师给我们举了这个例子-
BEGIN
IF first < second
THEN display first,second
ELSE
display second,first
ENDIF
END
如果 first 和 second 这两个数字相同(例如 2,2),则将采用 ELSE 路径,因为 first < second 的计算结果为 false,因此不会执行。
但是,我的软件老师说在某些语言中,两个数字相同会产生问题并导致错误或奇怪的行为(我相信他以 Visual Basic 为例)。我不明白这怎么可能。 IF 语句被评估为 true 或 false,因此选项之一必须 运行 并且评估 2 是否小于 2 应该没有问题。
虽然他是我的老师,我尊重他,但我并不完全信任他,他有时也会犯错误。他说的对吗?如果是这样,我可以举一些具体的例子来说明会发生什么吗?
谢谢
据我所知,if (expression)
中的 expression
总是计算为布尔值。至少在 C、C++、PHP、Java、.NET、Python、Javascript...
中是这样
但在一些古老或较少使用的语言中可能并非如此。
对于 Visual Basic,this Microsoft documentation page 明确表示 number < number
的计算结果为 FALSE
。
也许他是在(迂回地)谈论浮点不精确?
there should be no problem in evaluating whether 2 is less than 2.
对于使用不精确表示形式存储的某些数字,情况并非总是如此,例如:
Dim first As Double, second As Double
first = 0.3
second = 0.1 + 0.2
If first < second Then
Debug.Print first, "is less than", second
Else
Debug.Print "equal or greater"
End If
输出:
0.3 is less than 0.3
见Is floating point math broken?
当超出浮点类型的安全范围时,这会更加明显,例如 JavaScript:
> 9007199254740992 == 9007199254740993
< true
很明显 a < a 是假的,如果 a 是整数(不是小数)。但是,在 小数的情况下,这可能是真或假。 让我为您提供每个 c 语言的实例。 C 编译器使用 IEEE-754 数字表示法表示浮点数。
取a=0.1273(存入内存as:0.1272999423027039)
取b=0.12和c=0.0073+b
现在如果你检查,c
是真的.
我是学生,我的软件老师给我们举了这个例子-
BEGIN
IF first < second
THEN display first,second
ELSE
display second,first
ENDIF
END
如果 first 和 second 这两个数字相同(例如 2,2),则将采用 ELSE 路径,因为 first < second 的计算结果为 false,因此不会执行。
但是,我的软件老师说在某些语言中,两个数字相同会产生问题并导致错误或奇怪的行为(我相信他以 Visual Basic 为例)。我不明白这怎么可能。 IF 语句被评估为 true 或 false,因此选项之一必须 运行 并且评估 2 是否小于 2 应该没有问题。
虽然他是我的老师,我尊重他,但我并不完全信任他,他有时也会犯错误。他说的对吗?如果是这样,我可以举一些具体的例子来说明会发生什么吗? 谢谢
据我所知,if (expression)
中的 expression
总是计算为布尔值。至少在 C、C++、PHP、Java、.NET、Python、Javascript...
但在一些古老或较少使用的语言中可能并非如此。
对于 Visual Basic,this Microsoft documentation page 明确表示 number < number
的计算结果为 FALSE
。
也许他是在(迂回地)谈论浮点不精确?
there should be no problem in evaluating whether 2 is less than 2.
对于使用不精确表示形式存储的某些数字,情况并非总是如此,例如:
Dim first As Double, second As Double
first = 0.3
second = 0.1 + 0.2
If first < second Then
Debug.Print first, "is less than", second
Else
Debug.Print "equal or greater"
End If
输出:
0.3 is less than 0.3
见Is floating point math broken?
当超出浮点类型的安全范围时,这会更加明显,例如 JavaScript:
> 9007199254740992 == 9007199254740993
< true
很明显 a < a 是假的,如果 a 是整数(不是小数)。但是,在 小数的情况下,这可能是真或假。 让我为您提供每个 c 语言的实例。 C 编译器使用 IEEE-754 数字表示法表示浮点数。
取a=0.1273(存入内存as:0.1272999423027039)
取b=0.12和c=0.0073+b
现在如果你检查,c 是真的.