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

慕的地10843
TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊

哆啦的時(shí)光機(jī)
TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊
添加回答
舉報(bào)
0/150
提交
取消