簡體   English   中英

JavaScript 浮點好奇心

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM