如果语句不被视为布尔值?

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 是真的.