假設我有兩個變量a
和b
,既可以是類型爲float
,也可以是兩個類型都是double
,它們都包含一些值。以下斷言總是成立嗎?我的意思是,數值錯誤的存在是否會改變結論?斷言關於浮點數的關係運算符
A> B,如果且僅當一個< = B是假
一個< B是真實的,當且僅當a> = b爲假
一個> = b爲一定是真真,如果一個== b爲真,如果一個== b爲真
對於第三和f
一個< = b爲一定是真的第四,我的意思是,例如,「a == b是真的」總是給你「a> = b是真實的」?
編輯:
假定既不a
或b
是NaN或INF中。
編輯2:
讀取IEEE 754在1985年的標準後,我發現下面。
首先,它下面說
比較是準確的,並永遠不會溢出或下溢。
我明白,當做比較時,沒有考慮數字錯誤,所以數字按原樣比較。由於加法和減法如a - b
需要額外的努力來定義數值誤差是什麼,我假設上面的報價是說通過判斷a - b > 0
是否爲真來做比較,如a > b
是而不是。如果我錯了,請告訴我。
其次,它列出了四個互斥的規範關係。
四個互斥關係是可能的:小於,等於,大於和無序。最後一種情況出現在至少一個操作數是NaN的情況下。每個NaN都會將無序與包括它自己在內的所有事物進行比較。
然後,在表4中,它定義的各種操作符,如「>」或「> =」,在根據這些4間正則關係的真值的條件。從上表中我們立即具備以下條件:當且僅當一個< b爲假
一個< = b爲真,當且僅當A> B是假的
一個> = b爲真
既是一個> = b和< = b是一定正確,如果一個== b爲真
所以我的問題斷言可以斷定爲真。但是,我無法在標準中找到對稱性是否爲真的任何內容。換句話說,從a > b
我不知道b < a
是否爲真。因此我也無法從b < a is false
推導出a <= b is true
。所以,我很想知道,除了OP斷言,以下是始終不是真的
一個< b爲真,當且僅當B> A是真的
一當且僅當b> = a爲真< = b爲真
等
EDIT 3:
安瑞嘉正如@Mark Ransom所提到的那樣,我讀了維基百科頁面,我目前的理解是非正規數的存在並不會改變上面的結論。換句話說,如果一些硬件聲稱它完全支持非正規數字,它還需要確保比較運算符的定義符合上述標準。
編輯4:
我剛纔讀IEEE 754的2008年修訂版,它沒有說關於對稱性什麼無論是。所以我想這是不確定的。 (所有上述討論都假定在任何操作數中都不包含NaN或Inf)。
當你有'NaN's時,上面的斷言將失敗。 –
我明白了,謝謝。沒有nan和inf的情況如何? – shaoyl85
請參閱http://stackoverflow.com/questions/1565164也 – pmeerw