[英]JavaScript floating point curiosity
我嘗試做一些浮點比較,這是我發現的:
130 === 130.000000000000014210854715 // true
130 === 130.000000000000014210854716 // false
9 === 9.0000000000000008881784197001 // true
9 === 9.0000000000000008881784197002 // false
0.1 === 0.100000000000000012490009027033 // true
0.1 === 0.100000000000000012490009027034 // false
我嘗試在 Firefox 和 Chrome 上運行它們,結果相同。 好的,我知道浮點數比較是一種不好的做法,並且會出現意外行為。 但我只是對這些數字感到好奇,為什么或如何計算這些小數位序列?
如果您願意,您甚至可以進一步擴展這些序列(一種二進制搜索下一個序列)。
小數部分超出了 JavaScript 的Number
類型的精度。
JavaScript 只能處理您的號碼的130.0000000000000
部分,因此它變為130
(那些0
沒有意義)。
JavaScript 中的每個Number
實際上都是 64 位IEEE-754浮點數,因此數字130.000000000000014210854715
看起來像二進制...
0,10000000110,10000010000000000000000000000000000000000000000000000
其中組是符號( +
或-
)、指數和尾數/尾數。
你可以看到數字130
是相同的......
0,10000000110,10000010000000000000000000000000000000000000000000000
您需要 JavaScript 的 128 位Number
才能區分這兩個數字,或者對 JavaScript 或bignum使用float128實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.