成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

javascript浮點數(shù)學(xué)習(xí)總結(jié)之0.1+0.2

neroneroffy / 2907人閱讀

摘要:當(dāng)階碼全位,尾數(shù)全為時,采取非規(guī)格化,兩者不包含隱含的,用來表示。最簡單的精度算法就是是位十進制,所以位肯定能精確處理。當(dāng)然還有很多,有興趣可以自行查閱一下。

掘金搬來思否
浮點數(shù)的存儲格式:IEEE754-64bit 64位組成格式為:S(1位符號位) E(11位階碼)M(52位尾數(shù))

符號位:決定正負,0位正,1位負

階碼:指數(shù)位則為階碼-1023,決定了數(shù)值的大小

尾數(shù):有效數(shù)字,決定了精度

用科學(xué)計數(shù)法格式則為:(-1^(符號位0/1)) 1.xxxxx(尾數(shù)位) 2^(指數(shù)位)

需要記住的IEEE754規(guī)范有:

尾數(shù)位:有效數(shù)字的第一位必定是1,所以這個1不會被儲存,也就是說實際上尾數(shù)位52+1,類似1.xxx第一位就是1。

階碼:不存在負值,那怎么表示負指數(shù)呢?就是減去一個固定值;其值就是1023,也就是偏移量1023;除去全是1和全是0的情況,那么指數(shù)位的范圍則是[(1-1023),(2046-1023)] == [-1022,1023]。

當(dāng)階碼全位0,尾數(shù)全為0時,采取非規(guī)格化,兩者不包含隱含的1,用來表示0。

最簡單的精度算法就是:2^53是16位十進制,所以15位肯定能精確處理。

當(dāng)然還有很多,有興趣可以自行查閱一下。

知道了這些,就能更好的理解一些數(shù)值的由來:
Number.MAX_VALUE = 1.7976931348623157e+308;
尾數(shù):1.xxx1,后面為52個1,
要得到最大值,我們就需要把小數(shù)點往后移,就靠指數(shù)1023-52,剩余971;  
因此最大值等價于((Math.pow(2,53)-1)*Math.pow(2,971))
Number.MIN_VALUE =5e-324;  
尾數(shù):1.xxxx1,后面第52位為1,其余為0,這時首位的1需要隱藏,
這時候就是負了52位,在加上2^-1022,
等價于((Math.pow(2,-52))*Math.pow(2,-1022))
Number.MAX_SAFE_INTEGER = 9007199254740991;
安全數(shù)就是能夠精確處理的,精度靠尾數(shù)決定,
那我們來看當(dāng)1.1111...1,小數(shù)點后接52個1,這是精度最大顯示,
要取其最大值那就是向指數(shù)借52位,所以最大安全數(shù)就等于Math.pow(2,53)-1

同理Number.MIN_SAFE_INTEGER = -9007199254740991;
對最大安全數(shù)添加負號即可
重點0.1 + 0.2 怎么計算的呢?
首先,0.1轉(zhuǎn)二進制 :0.0 001100110011001100110011..0011 0011,
改寫為科學(xué)計數(shù)法表示:1.100110011...0011(0011)*2^-4,
尾數(shù)位為52為需要取舍括號中最后一位舍去進1,指數(shù)為-4,那個階碼就是-4+1023=1019,
最終浮點數(shù)格式:
0-01111111011-1001100110011001100110011001100110011001100110011010
同理0.2可以表示為:
0-01111111100-1001100110011001100110011001100110011001100110011010
最后兩者相加結(jié)果為:
0-01111111101-0011001100110011001100110011001100110011001100110100,
指數(shù)位為-2,
1.00110011001100110011001100110011001100110011001101(00)*2^-2
所以二進制表示:
0.0100110011001100110011001100110011001100110011001101(00),
那么轉(zhuǎn)為十進制就是0.1 + 0.2 = 0.30000000000000004 != 0.3 

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/97939.html

相關(guān)文章

  • JavaScript浮點運算0.2+0.1 !== 0.3

    摘要:標(biāo)準(zhǔn)二進制浮點數(shù)算法就是一個對實數(shù)進行計算機編碼的標(biāo)準(zhǔn)。然后把取出的整數(shù)部分按順序排列起來,先取的整數(shù)作為二進制小數(shù)的高位有效位,后取的整數(shù)作為低位有效位。 浮點運算JavaScript 本文主要討論JavaScript的浮點運算,主要包括 JavaScript number基本類型 二進制表示十進制 浮點數(shù)的精度 number 數(shù)字類型 在JavaScript中,數(shù)字只有numb...

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

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

    Profeel 評論0 收藏0
  • JS數(shù)

    摘要:由于浮點數(shù)不是精確的值,所以涉及小數(shù)的比較和運算要特別小心。根據(jù)標(biāo)準(zhǔn),位浮點數(shù)的指數(shù)部分的長度是個二進制位,意味著指數(shù)部分的最大值是的次方減。也就是說,位浮點數(shù)的指數(shù)部分的值最大為。 一 前言 這篇文章主要解決以下三個問題: 問題1:浮點數(shù)計算精確度的問題 0.1 + 0.2; //0.30000000000000004 0.1 + 0.2 === 0.3; // ...

    williamwen1986 評論0 收藏0
  • 為什么JavaScript里面0.1+0.2 === 0.3是false

    摘要:返回是,這是為什么呢我們知道浮點數(shù)計算是不精確的,上面的返回式實際上是這樣的在的新規(guī)范加入了一個新的東西是在對象上面,新增一個極小的常量。根據(jù)規(guī)格,它表示與大于的最小浮點數(shù)之間的差。上面的代碼為浮點數(shù)運算,部署了一個誤差檢查函數(shù)。 0.1+0.2 === 0.3 //返回是false, 這是為什么呢?? 我們知道浮點數(shù)計算是不精確的,上面的返回式實際上是這樣的:0.1 + 0.2 = ...

    nicercode 評論0 收藏0
  • javascript0.1 + 0.2 != 0.3?

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

    ivydom 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<