對于IEEE 754 NaN值返回false的所有比較的理由是什么?為什么對NaN值的比較與所有其他值的行為不同?也就是說,與操作符=、<=、>=、<、>的所有比較,其中一個或兩個值為NaN返回false,這與所有其他值的行為相反。我想這在某種程度上簡化了數值計算,但我找不到明確說明的原因,甚至在關于IEEE 754現狀的講義其中詳細討論了其他設計決策。這種不正常的行為在進行簡單的數據處理時會造成麻煩。例如,當對記錄列表進行排序時,w.r.t。在一個C程序中的一些實值字段,我需要編寫額外的代碼來處理作為最大元素的NaN,否則排序算法可能會變得混亂。編輯:到目前為止,所有的答案都認為比較NAN是毫無意義的。我同意,但這并不意味著正確的答案是錯誤的,而是一個非布爾值(NAB),幸運的是它并不存在。因此,在我看來,為比較返回真假的選擇是任意的,對于一般的數據處理來說,如果它遵循通常的定律(自反性=,<,=,>的三分法),那么它將是有利的,以免依賴這些定律的數據結構變得混亂。所以我要求的是打破這些規律的一些具體好處,而不僅僅是哲學推理。編輯2:我想我現在明白了為什么要使NaN最大化是個壞主意,它會把上限的計算搞砸。NaN!=NaN可能是避免在循環中檢測收斂的理想方法,例如while (x != oldX) {
oldX = x;
x = better_approximation(x);
}但是,最好是將絕對差與小限度進行比較。因此,IMHO,這是一個相對薄弱的理由,打破自反性在NaN。
對于IEEE 754 NaN值返回false的所有比較的理由是什么?
慕田峪9158850
2019-06-03 17:13:54