【问题标题】:If statements not treated as boolean?如果语句不被视为布尔值?
【发布时间】:2016-08-29 19:47:58
【问题描述】:

我是一名学生,我的软件老师给了我们这个例子 -

BEGIN
IF first < second
    THEN display first,second
ELSE
    display second,first
ENDIF
END

如果第一个和第二个两个数字相同(例如 2,2),则将采用 ELSE 路径,因为第一个

但是,我的软件老师说,在某些语言中,两个数字相同会产生问题并导致错误或奇怪的行为(我相信他以 Visual Basic 为例)。我不明白这是怎么可能的。 IF 语句被评估为真或假,因此必须运行其中一个选项,并且在评估 2 是否小于 2 时应该没有问题。

虽然他是我的老师,我尊重他,但我并不完全信任他,他有时也会犯错误。他说的对吗?如果是这样,我可以举一些具体的例子来说明会发生什么吗? 谢谢。

【问题讨论】:

  • 给他看一个 VB 的例子,或者像 javascript 这样易于访问的其他语言
  • 我不记得听说过如果 IF 为假则不能保证 ELSE 的语言。甚至是 Visual Basic。我想问他一个例子会很好。 :)
  • 他有没有提到短路评估?默认情况下,Visual Basic 不会这样做,而且来自 C 风格的语言可能会非常出乎意料。
  • 啊,可能。你能给我一点建议吗? @AntonGogolev

标签: if-statement vb6 language-agnostic pseudocode


【解决方案1】:

也许他在谈论(以一种迂回的方式)浮点不精确?

判断2是否小于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

【讨论】:

    【解决方案2】:

    据我所知,if (expression) 中的 expression 始终计算为布尔值。至少在 C、C++、PHP、Java、.NET、Python、Javascript 中是这样的......

    但在一些旧的或较少使用的语言中可能并非如此。

    对于 Visual Basic,this Microsoft documentation page 明确表示 number &lt; number 将计算为 FALSE

    【讨论】:

    • 好吧,我不认为这很常见。谢谢。
    【解决方案3】:

    如果 a 是整数(不是小数),那么显然 a 小数的情况下,这可能是真的或假的。让我给你每个 c 语言的实例。 C 编译器使用 IEEE-754 数字表示来表示浮点数。

    取a=0.1273(在内存中存储为:0.1272999423027039)

    取 b=0.12 和 c=0.0073+b

    现在如果你检查,c 这是真的

    【讨论】:

      猜你喜欢
      • 2017-07-02
      • 2015-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多