成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

聊一聊js中 0.1 + 0.2 != 0.3

dingda / 3339人閱讀

摘要:中數(shù)字存儲使用的是位雙精度浮點(diǎn)數(shù)在計算機(jī)中存儲為位符號位正數(shù)負(fù)數(shù)指數(shù)位用來確定范圍尾數(shù)位用來確定精度轉(zhuǎn)成十進(jìn)制表示法為符號位指數(shù)位尾數(shù)位偏正值使得指數(shù)位真實(shí)取值為而非目的是為了方便比較大小實(shí)際指數(shù)值階碼偏正值階碼指數(shù)的移碼移碼與補(bǔ)

Javascript中數(shù)字存儲使用的是IEEE754 64位雙精度浮點(diǎn)數(shù)

在計算機(jī)中存儲為64位
1 11 52
1: 符號位 0正數(shù) 1負(fù)數(shù)
11: 指數(shù)位 用來確定范圍
52: 尾數(shù)位 用來確定精度
轉(zhuǎn)成十進(jìn)制表示法為

num = (-1)^s * (1.f) * 2^E
E = e - 1023
s:符號位
e:指數(shù)位
f:尾數(shù)位
1023偏正值 使得指數(shù)位真實(shí)取值為[-1023, 1024] 而非 [0, 2047] 目的是為了方便比較大小
實(shí)際指數(shù)值 = 階碼 - 偏正值
階碼 = 指數(shù)的移碼 - 1
移碼與補(bǔ)碼符號為互為取反
舉例:
如果指數(shù)位實(shí)際值為-1
原碼:100 0000 0001
反碼:111 1111 1110
補(bǔ)碼:111 1111 1111
移碼:011 1111 1111
階碼:011 1111 1110 = 1022
也可以通過
階碼 = 指數(shù) + 偏正值 = -1 + 1023 = 1022 = 011 1111 1110來計算得到

指數(shù)位全0和全1有特殊含義,在后面會講到,用來表示+-0 和 +-∞

特殊值

機(jī)器精度
del = 2^-52

接下來解釋一下為什么在使用IEEE754標(biāo)準(zhǔn)的語言中0.1 + 0.2 = 0.30000000000000004
首先我們計算下0.1的二進(jìn)制
0.1 * 2 = 0
0.2 * 2 = 0
0.4 * 2 = 0
0.8 * 2 = 1
0.6 * 2 = 1
0.2 * 2 = 0
0.4 * 2 = 0
0.8 * 2 = 1
0.6 * 2 = 1
0.2 * 2 = 0
....
所以0.1的二進(jìn)制為 0.0001100110011001100...循環(huán),
可以轉(zhuǎn)換為2^-4 * 1.100110011001100...
由于保留位數(shù)共52位,不包括最左邊整數(shù)位1,
所以最終在計算機(jī)中存儲的數(shù)值是:2^-4 * 1.100 11001100 11001100 11001100 11001100 11001100 11001100 1

同理0.2
0.2 * 2 = 0
0.4 * 2 = 0
0.8 * 2 = 1
0.6 * 2 = 1
0.2 * 2 = 0
0.4 * 2 = 0
0.8 * 2 = 1
0.6 * 2 = 1
...
所以0.2的二進(jìn)制為 0.001100110011001100...循環(huán),
可以轉(zhuǎn)換為2^-3 * 1.100110011001100...
最易最終在計算機(jī)中存儲的數(shù)值是:2^-3 * 1.100 11001100 11001100 11001100 11001100 11001100 11001100 1
兩者相加
0.0001100 11001100 11001100 11001100 11001100 11001100 11001100 1
+
0.001100 11001100 11001100 11001100 11001100 11001100 11001100 1
= 0.0 10011001 10011001 10011001 10011001 10011001 10011001 10011
≈ 0.30000000000000004

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/107565.html

相關(guān)文章

  • javascript0.1 + 0.2 != 0.3?

    摘要:按照的數(shù)字格式,整數(shù)有的范圍是,而且只能表示有限個浮點(diǎn)數(shù),能表示的個數(shù)為個。 0.1+0.2 等于0.3嗎?相信拿著這條題目隨便問一個高年級的小學(xué)生,他們都會毫不猶豫都回答:相等。是的,相等是正常的,這是常識。但是都說實(shí)踐是檢驗真理的唯一標(biāo)準(zhǔn),拿這道簡單的算術(shù)題用javascript在chrome控制臺試驗一下: 結(jié)果令人大跌眼鏡,在控制臺輸入0.1+0.2 == 0.3返回的結(jié)果竟然...

    ivydom 評論0 收藏0
  • 為什么0.1+0.2不等于0.3

    摘要:又如,對于,結(jié)果其實(shí)并不是,但是最接近真實(shí)結(jié)果的數(shù),比其它任何浮點(diǎn)數(shù)都更接近。許多語言也就直接顯示結(jié)果為了,而不展示一個浮點(diǎn)數(shù)的真實(shí)結(jié)果了。小結(jié)本文主要介紹了浮點(diǎn)數(shù)計算問題,簡單回答了為什么以及怎么辦兩個問題為什么不等于。 原文地址:為什么0.1+0.2不等于0.3 先看兩個簡單但詭異的代碼: 0.1 + 0.2 > 0.3 // true 0.1 * 0.1 = 0.01000000...

    Profeel 評論0 收藏0
  • 如何解決0.1 +0.2===0.30000000000000004類問題

    摘要:方法使用定點(diǎn)表示法來格式化一個數(shù),會對結(jié)果進(jìn)行四舍五入。該數(shù)值在必要時進(jìn)行四舍五入,另外在必要時會用來填充小數(shù)部分,以便小數(shù)部分有指定的位數(shù)。如果數(shù)值大于,該方法會簡單調(diào)用并返回一個指數(shù)記數(shù)法格式的字符串。在環(huán)境中,只能是之間,測試版本為。 showImg(https://segmentfault.com/img/remote/1460000011913134?w=768&h=521)...

    yuanzhanghu 評論0 收藏0
  • 0.1 + 0.2 != 0.3背后的原理

    摘要:標(biāo)準(zhǔn)是浮點(diǎn)數(shù)算術(shù)標(biāo)準(zhǔn)的標(biāo)準(zhǔn)編號,等同于國際標(biāo)準(zhǔn)。標(biāo)準(zhǔn)規(guī)定了計算機(jī)程序設(shè)計環(huán)境中的二進(jìn)制和十進(jìn)制的浮點(diǎn)數(shù)之間的交換算術(shù)格式以及方法。 初學(xué)JavaScript,在進(jìn)行小數(shù)(浮點(diǎn)數(shù))運(yùn)算時,經(jīng)常會碰到這樣的情況:0.1 + 0.2=0.30000000000000004,記得當(dāng)時,教程告訴我們說,0.1 + 0.2在JavaScript運(yùn)算中,它的值是不固定的,可以在后面學(xué)習(xí)和試驗中,漸漸...

    阿羅 評論0 收藏0
  • 一個函數(shù)讓你看懂 'Why 0.1+0.2!=0.3'

    摘要:的二進(jìn)制科學(xué)計數(shù)法第位是,所以就有了下面的結(jié)果有著同樣的問題,其實(shí)正是由于這樣的存儲,在這里有了精度丟失,導(dǎo)致了。最大安全數(shù)字中表示最大安全數(shù)字計算結(jié)果是,即在這個數(shù)范圍內(nèi)不會出現(xiàn)精度丟失小數(shù)除外這個數(shù)實(shí)際上是。是一個任意精度的整數(shù)。 話不多說,先上代碼 function judgeFloat(n, m) { const binaryN = n.toString(2...

    mushang 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<