摘要:一復(fù)習(xí)進(jìn)制轉(zhuǎn)進(jìn)制整數(shù)部分除取余,逆序小數(shù)部分乘取整,正序在線工具二了解雙精度浮點數(shù)規(guī)范通過進(jìn)制的科學(xué)計數(shù)法存儲。最終可表示為圖片來源其中,,都是實際存儲科學(xué)計數(shù)法的值。
一、復(fù)習(xí)10進(jìn)制轉(zhuǎn)2進(jìn)制
1)整數(shù)部分:除2取余,逆序
2)小數(shù)部分:乘2取整,正序
在線工具
和10進(jìn)制的科學(xué)計數(shù)法類似,二進(jìn)制的科學(xué)技術(shù)法格式為1.xxx*2^N。其中需要留意下二進(jìn)制科學(xué)計數(shù)法的整數(shù)部分都是1,所以在存儲時省略整數(shù)部分1。
2) 格式:符號位+指數(shù)位+尾數(shù)位符號位S:第 1 位是正負(fù)數(shù)符號位(sign),0代表正數(shù),1代表負(fù)數(shù)
指數(shù)位E:中間的 11 位存儲指數(shù)(exponent),用來表示次方數(shù)
科學(xué)計數(shù)法中指數(shù)E是可以為負(fù)數(shù)的,在表示負(fù)的指數(shù)時IEEE754標(biāo)準(zhǔn)引入了一個偏移量1023,在存儲指數(shù)時加上該偏移量把負(fù)數(shù)E轉(zhuǎn)成正數(shù)。這就導(dǎo)致11位的指數(shù)能夠表示指數(shù)的范圍是[-1023, 1024]。
尾數(shù)位M:最后的 52 位是尾數(shù)(mantissa),超出的部分自動進(jìn)一舍零,沒有填滿的部分自動補0
如10進(jìn)制數(shù)400.12,用10進(jìn)制科學(xué)計數(shù)法表示為:4.0012*10^2,。其中"0012"就是尾數(shù)部分。
最終可表示為(圖片來源):
其中S,E,M都是實際存儲科學(xué)計數(shù)法的值。
如10進(jìn)制4.5轉(zhuǎn)成2進(jìn)制為:
// Step1 轉(zhuǎn)成二進(jìn)制 100.1 // Step2 轉(zhuǎn)成二進(jìn)制科學(xué)計數(shù) 1.001*2^2 S = 0 E = 2 + 1023 = 2015 M = 001 // 整數(shù)1被省略了
形象的查看存儲情況,可參考這里
3) 有限集合IEEE754能表示的實數(shù)數(shù)量是有限的,假設(shè)MAX_VALUE,MIN_VALUE分別表示其表示的最大正數(shù)和最小正數(shù),那有限集合可表示為:
[-MAX_VALUE, -MIN_VALUE] U [MIN_VALUE, -MAX_VALUE]幾個有趣的問題 1) 0.1 + 0.2 !== 0.3
0.1,0.2和0.3在轉(zhuǎn)成二進(jìn)制時都是無限循環(huán)的,在存儲時會失去精度,0.1+0.2在運算時也會失去精度,導(dǎo)致結(jié)果不等于0.3。
2) 給一個數(shù)字加上一個非0的增量還等于本身這個數(shù)字1 + Number.MIN_VALUE/2 === 1
這個增量如果小于JS能表示的最小浮點數(shù)就會視為0,加上這樣的數(shù)等于加上0。
3) JS最大整數(shù)為啥是2^53-1而不是2^52-1尾數(shù)占用52個bit,再加速省略的那個bit(見2.1)正好53個bit。
4)JS可以精確的表示哪些小數(shù)呢小數(shù)部分是這種格式的都可以精確表示。
1/Math.pow(2, N), 其中N是(0, 1024)區(qū)間的整數(shù)。
如分?jǐn)?shù)1/2,1/4, 1/8。
參考抓住數(shù)據(jù)的小尾巴 - JS浮點數(shù)陷阱及解法
該死的IEEE-754浮點數(shù),說「約」就「約」,你的底線呢?以JS的名義來好好查查你
IEEE 754 計算器
IEEE 754 二進(jìn)制表示
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/107293.html
摘要:推導(dǎo)為何等于在中所有數(shù)值都以標(biāo)準(zhǔn)的雙精度浮點數(shù)進(jìn)行存儲的。先來了解下標(biāo)準(zhǔn)下的雙精度浮點數(shù)。精度位總共是,因為用科學(xué)計數(shù)法表示,所以首位固定的就沒有占用空間。驗證完成的最大安全數(shù)是如何來的根據(jù)雙精度浮點數(shù)的構(gòu)成,精度位數(shù)是。 閱讀完本文可以了解到 0.1 + 0.2 為什么等于 0.30000000000000004 以及 JavaScript 中最大安全數(shù)是如何來的。 十進(jìn)制小數(shù)轉(zhuǎn)為二...
摘要:而的浮點數(shù)設(shè)置的偏移值是,因為指數(shù)域表現(xiàn)為一個非負(fù)數(shù),位,所以,實際的,所以。這是因為它們在轉(zhuǎn)為二進(jìn)制時要舍入部分的不同可能造成的不同舍 IEEE 754 表示:你盡管抓狂、罵娘,但你能完全避開我,算我輸。 一、IEEE-754浮點數(shù)捅出的那些婁子 首先我們還是來看幾個簡單的問題,能說出每一個問題的細(xì)節(jié)的話就可以跳過了,而如果只能泛泛說一句因為IEEE754浮點數(shù)精度問題,那么下文還是...
摘要:類型使用的就是標(biāo)準(zhǔn)中的雙精度浮點數(shù)。數(shù)字的許多特性都依賴于此標(biāo)準(zhǔn),例如令人費解的不等于這篇文章介紹標(biāo)準(zhǔn)中雙精度浮點數(shù)二進(jìn)制儲存格式,并由此推出中數(shù)字的一些特性。 Javascript 作為一門動態(tài)語言,其數(shù)字類型只有 number 一種。 nubmer 類型使用的就是 IEEE754 標(biāo)準(zhǔn)中的 雙精度浮點數(shù)。Javascript 數(shù)字的許多特性都依賴于此標(biāo)準(zhǔn),例如令人費解的 0.1+0...
摘要:如題先陳述下問題背景偶爾測測自己寫的計算器,隨便輸入玩嘛,然后發(fā)生下面詭異的事情當(dāng)我從一個輸入到十個的時候,過程顯示都是正確的,像這樣繼續(xù)輸入一個的時候,然后就這個樣子了什么原因呢看了下自己的代碼,代碼重要部分長這樣的這里用了一下強制轉(zhuǎn)化為 如題 先陳述下問題背景 偶爾測測自己寫的計算器,隨便輸入玩嘛,然后發(fā)生下面詭異的事情:當(dāng)我從一個 1 輸入到十個 1 的時候,過程顯示都是正確的...
摘要:數(shù)字?jǐn)?shù)字都是浮點數(shù),按照標(biāo)準(zhǔn)進(jìn)行存儲。因此,只有偶數(shù)可以在范圍內(nèi)表示。但只有超過指數(shù)的上限才稱為中的溢出。結(jié)論在這篇博文中,我們研究了如何將其浮點數(shù)轉(zhuǎn)換為位。 JavaScript中的所有數(shù)字都是浮點數(shù)。這篇博客文章解釋了這些浮點數(shù)如何在64位二進(jìn)制內(nèi)部表示。由于特別考慮,本文中的數(shù)字將用整數(shù)表示,以便在閱讀本文后,您將了解在以下交互中會發(fā)生什么: (譯者注:浮點數(shù)并不一定等于小數(shù),定...
閱讀 977·2021-11-24 09:39
閱讀 3408·2021-10-27 14:20
閱讀 2333·2019-08-30 14:08
閱讀 3372·2019-08-29 16:34
閱讀 2187·2019-08-26 12:14
閱讀 2114·2019-08-26 11:54
閱讀 2784·2019-08-26 11:44
閱讀 2487·2019-08-26 11:38