2 回答

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊
任何 float64 都是可比較的。比較任意兩個(gè)浮點(diǎn)數(shù)是沒有問題的。您可以將 NaN 與 3.141 或 NaN 與 NaN 進(jìn)行比較。
問題不在于NaN/浮點(diǎn)數(shù)的可比性。問題是任何NaN 與anything的比較,甚至是其他 NaN 或它本身都會(huì)導(dǎo)致錯(cuò)誤。
NaN != x for all x, including NaN
這使得使用 NaN 作為映射鍵基本上是不可能的,因?yàn)椴豢赡苷业?NaN。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊
簡(jiǎn)短的回答是這不是編譯器錯(cuò)誤。
映射需要可比較的類型作為鍵。Float(不管是 float32 還是 float64)都是可比類型。NaN(以不同的方式,零,可以是正零或負(fù)零)的奇怪之處在于,雖然您可以比較兩個(gè) NaN,但它們總是比較不相等。所以當(dāng)是 NaN 時(shí),一些浮點(diǎn)值x
不等于它自己x
。這會(huì)產(chǎn)生驚喜。
問題 20660評(píng)論指出,在許多其他語言中也會(huì)出現(xiàn)相同類型的問題。
我特別喜歡 Russ Cox 的評(píng)論,即這里只有糟糕的答案。
- 2 回答
- 0 關(guān)注
- 274 瀏覽
添加回答
舉報(bào)