JavaScript 符號位、指數位、尾數位

1. JavaScript中數字的存儲標準是 IEEE754 浮點數標準。代碼中使用的不管是整數仍是小數,都是同一種數據類型——64 位雙精度浮點型ip

全部數字以二進制存儲,每一個數字對應的二進制分爲三段:符號位、指數位、尾數位。內存

用於存儲的二進制有 64 位,其中符號位在六十四位的第一位,0 表示正數,1 表示負數。符號位以後的 11 位是指數位,決定了數字的範圍。指數位以後的 52 位是尾數位,決定了數字的精度。循環

2. 在 JavaScript 中,雙精度浮點型的數轉化成二進制的數保存,讀取時根據指數位和尾數位的值轉化成雙精度浮點數。數據類型

好比說存儲 8.8125 這個數,它的整數部分的二進制是 1000,小數部分的二進制是 1101。這兩部分連起來是 1000.1101,可是存儲到內存中小數點會消失,由於計算機只能存儲 0 和 1。二進制

1000.1101 這個二進制數用科學計數法表示是 1.0001101 * 2^3,這裏的 3 (二進制是 0011)即爲指數。數據

如今咱們很容易判斷符號位是 0,尾數位就是科學計數法的小數部分 0001101。指數位用來存儲科學計數法的指數,此處爲 3。指數位有正負,11 位指數位表示的指數範圍是 -1023~1024,因此指數 3 的指數位存儲爲 1026(3 + 1023)。計算機

能夠判斷 JavaScript 數值的最大值爲 53 位二進制的最大值: 2^53 -1。浮點數

PS:科學計數法中小數點前的 1 能夠省略,由於這一位永遠是 1。0.5 二進制科學計數爲 1.00 * 2^-1。數字

3. 最後來講一下浮點數精度的問題。不少人都知道,兩個浮點數相加時,結果會有一些偏差。好比 0.1 + 0.2 的結果是 0.30000000000000004。

這是由於 0.1 和 0.2 用二進制表示時爲 0.0001 1001 1001 1001...(1100循環) 和 0.0011 0011 0011 0011...(0011循環)。若是截取於第 52 位,就會獲得一個有偏差的結果。

相關文章
相關標籤/搜索