簡體   English   中英

如果語句不被視為布爾值?

[英]If statements not treated as boolean?

我是學生,我的軟件老師給了我們這個例子-

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

如果第一個和第二個兩個數字相同(例如2,2),則將采用ELSE路徑,因為first <second的計算結果為false,因此不會執行。

但是,我的軟件老師說,在某些語言中,這兩個數字相同將是有問題的,並且會導致錯誤或奇怪的行為(我相信他引用了Visual Basic作為示例)。 我不知道這怎么可能。 IF語句的計算結果為true或false,因此必須運行選項之一,並且評估2是否小於2應該沒有問題。

盡管他是我的老師,我也很尊重他,但我並不完全相信他,他有時也會犯錯。 他說的話正確嗎? 如果是這樣,我能舉一些具體的例子嗎? 謝謝。

也許他正在(圍繞某種方式)談論浮點不精確性?

評估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

請參閱浮點數學是否已損壞?

當一個值超出浮點類型的安全范圍時,例如在JavaScript中,這可以更明顯地體現出來:

> 9007199254740992 == 9007199254740993
< true

據我所知, expressionif (expression)始終計算為一個布爾值。 至少在C,C ++,PHP,Java,.NET,Python,Javascript中是如此。

但是在某些較舊的或較少使用的語言中可能並非如此。

對於Visual Basic, 此Microsoft文檔頁面明確指出number < number將評估為FALSE

很明顯,如果a是Integer(不是小數),則<a為假。 但是,對於小數,這可能為假。 讓我為您提供每種C語言的實例。 C編譯器將IEEE-754數字表示形式用於浮點。

取a = 0.1273(存儲在內存中為:0.1272999423027039)

取b = 0.12和c = 0.0073 + b

現在,如果您檢查一下, c這是真的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM