IEEE754浮點數(shù)格式與Javascript Number的特性

Javascript作為一門動態(tài)語言节腐,其數(shù)字類型只有Number一種闪唆。 Nubmer類型使用的就是IEEE754標準中的 雙精度浮點數(shù)檀何。Javascript數(shù)字的許多特性都依賴于此標準,例如令人費解的0.1+0.2不等于0.3哲泊。

這篇文章介紹IEEE754標準中雙精度浮點數(shù)二進制儲存格式,并由此推出js中數(shù)字的一些特性催蝗。

一切威、IEEE754中浮點數(shù)的儲存格式

在IEEE754中,雙精度浮點數(shù)儲存為64位:


指數(shù)位可以通過下面的方法轉換為使用的指數(shù)值:


浮點數(shù)表示的值的形式由 ef 確定:

二丙号、javascript Number的特性

在js中Number對象上附帶了許多屬性先朦,表示可數(shù)的范圍等信息,例如Number.MAX_SAFE_INTEGER是一個16位的數(shù)字犬缨,這一部分將解釋如何計算出這些有特殊意義的數(shù)字喳魏。

1.計算Number.MAX_VALUE和Number.MIN_VALUE

當符號位為0、指數(shù)取到1023怀薛、小數(shù)位全為1時刺彩,為可表示的最大值
當符號位為0、指數(shù)位全為0(表示非規(guī)格浮點數(shù))枝恋、小數(shù)位僅最后一位為1時创倔,為可表示的最小正值

var max = (-1)**0 * 2**1023 * (Number.parseInt( "1".repeat(53) ,2) * 2**-52);
max === Number.MAX_VALUE;
// true

var min = (-1)**0 * 2**-1022 * (Number.parseInt( "0".repeat(52)+"1" ,2) * 2**-52);
min === Number.MIN_VALUE;
// true

2.計算Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER

Number.MAX_SAFE_INTEGER表示最大安全整數(shù),它是9開頭的16位數(shù)字焚碌,也表明js Number最大精度不超過16位畦攘。
ECMASCRIPT-262定義:

The value of Number.MAX_SAFE_INTEGER is the largest integer n such that n and n + 1 are both exactly representable as a Number value.
http://www.ecma-international...

改變指數(shù)位為53,這讓每個小數(shù)位都表示浮點數(shù)的整數(shù)部分十电,小數(shù)位最低位對應 2^0知押,然后將每個小數(shù)位都置1,可得最大準確整數(shù):

var max_safe_int = (-1)**0 * 2**52 * (Number.parseInt("1".repeat(53),2) * 2**-52);
max_safe_int === Number.MAX_SAFE_INTEGER;
// true
//當它 +1 時鹃骂,可由 (-1)**0 * 2**53 * (Number.parseInt("1"+"0".repeat(52),2) * 2**-52) 正確表示台盯,而再 +1 時則無法準確表示

//符號位取反可得最小安全整數(shù)
-1 * max_safe_int === Number.MIN_SAFE_INTEGER;

3.計算Number.EPSILON

Number.EPSILON是一個極小值,用于檢測計算結果是否在誤差范圍內(nèi)畏线。例如:

Math.abs(0.1 + 0.2 - 0.3) < Number.EPSILON;
// true

//2017-9-27 補充
1.1 + 1.3 - 2.4 < Number.EPSILON
// false

根據(jù)ECMASCRIPT-262定義:

The value of Number.EPSILON is the difference between 1 and the smallest value greater than 1 that is representable as a Number value, which is approximately 2.2204460492503130808472633361816 x 10???16.
http://www.ecma-international...

根據(jù)定義Number.EPSILON是大于1的最小可表示數(shù)與1的差静盅,可以據(jù)此計算出Number.EPSILON的值:

//將表示1的二進制小數(shù)位的最左端置1,可表示大于1的最小數(shù)
var epsilon = (-1)**0 * 2**0 * (Number.parseInt("1"+"0".repeat(51)+"1",2) * 2**-52) - 1;
// (-1)**0 * 2**0 * (+`0b1${"0".repeat(51)}1` * 2**-52) - 1;
epsilon === Number.EPSILON;
// true

原文:https://segmentfault.com/a/1190000008268668

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末象踊,一起剝皮案震驚了整個濱河市温亲,隨后出現(xiàn)的幾起案子棚壁,更是在濱河造成了極大的恐慌,老刑警劉巖栈虚,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讥此,死亡現(xiàn)場離奇詭異炬太,居然都是意外死亡爆捞,警方通過查閱死者的電腦和手機考阱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來粘姜,“玉大人鬓照,你說我怎么就攤上這事」陆簦” “怎么了豺裆?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長号显。 經(jīng)常有香客問我臭猜,道長,這世上最難降的妖魔是什么押蚤? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任蔑歌,我火速辦了婚禮,結果婚禮上揽碘,老公的妹妹穿的比我還像新娘次屠。我一直安慰自己,他們只是感情好雳刺,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布劫灶。 她就那樣靜靜地躺著,像睡著了一般煞烫。 火紅的嫁衣襯著肌膚如雪浑此。 梳的紋絲不亂的頭發(fā)上累颂,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天滞详,我揣著相機與錄音,去河邊找鬼紊馏。 笑死料饥,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的朱监。 我是一名探鬼主播岸啡,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赫编!你這毒婦竟也來了巡蘸?” 一聲冷哼從身側響起奋隶,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎悦荒,沒想到半個月后唯欣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡搬味,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年境氢,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碰纬。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡萍聊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出悦析,到底是詐尸還是另有隱情寿桨,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布强戴,位于F島的核電站牛隅,受9級特大地震影響,放射性物質發(fā)生泄漏酌泰。R本人自食惡果不足惜媒佣,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望陵刹。 院中可真熱鬧默伍,春花似錦、人聲如沸衰琐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽羡宙。三九已至狸剃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狗热,已是汗流浹背钞馁。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留匿刮,地道東北人僧凰。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像熟丸,于是被迫代替她去往敵國和親训措。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359