JS中Number漫談

數(shù)字作為語言的基礎(chǔ)十分重要,JS也一樣。JS中的數(shù)字只有一種就是雙精度浮點數(shù)搓幌。看ES文檔的時候發(fā)現(xiàn)一個奇怪的問題迅箩,JS中可以表示的數(shù)字是有限的溉愁!于是產(chǎn)生了一系列的疑問:JS中到底有多少個數(shù)字?JS中的數(shù)字最小值是多少饲趋?最大值呢拐揭?JS精確度又是多少?下面一一來說說奕塑。
JS中到底有多少個數(shù)字堂污?

文檔的回答是:2的64次方減去2的53次方再加三。這是怎么計算的呢龄砰?繼續(xù)往下看:后面的加3是三個特殊的數(shù)字正無窮盟猖,負(fù)無窮和NAN。剩下的還要去除兩個特殊的數(shù)字正零和負(fù)零换棚,剩下要從雙精度浮點數(shù)的規(guī)范IEEE754講起式镐,規(guī)范規(guī)定了雙精度浮點數(shù)是64位的,第1位為符號位表示正負(fù)固蚤,第2位到12位為指數(shù)位表示以2為基底的指數(shù)值碟案,剩下的52位為小數(shù)位或分?jǐn)?shù)位。所有的值可以分為10類的值颇蜡,其中四種是NaN類型的价说,剩下的6種正負(fù)各四種以0為原點對稱分布,以正數(shù)(符號位為0)為例:

1.指數(shù)位全0风秤,分?jǐn)?shù)位全0:表示正無窮鳖目;
2.指數(shù)位全0,分?jǐn)?shù)位非全0并且以0為虛擬的分?jǐn)?shù)首位(所以分?jǐn)?shù)共53位):表示正非規(guī)范數(shù)值缤弦;
3.指數(shù)位非全0非全1领迈,分?jǐn)?shù)位任意值并且以1為虛擬的分?jǐn)?shù)首位(所以分?jǐn)?shù)共53位):表示正規(guī)范數(shù)值;

正數(shù)共有:1 + Math.pow(2,52) - 1 + (Math.pow(2, 11) - 1) * (Math.pow(2, 52)) = Math.pow(2, 63) - Math.pow(2, 52)
加上負(fù)數(shù)的所有共有:Math.pow(2, 64) - Math.pow(2, 53)
補充:當(dāng)指數(shù)全1時為NaN值,但是ES規(guī)范規(guī)定NaN只有一個值狸捅,且任意兩個NaN不做區(qū)分衷蜓,且不相等。

JS中最大值和最小值尘喝?

此處的最大值和最小值是取絕對值的磁浇,且不包含極值0和正無窮。最大值好研究當(dāng)然是分?jǐn)?shù)位取最大值約為2朽褪,乘以指數(shù)位最大值Math.pow(2, 1023)置吓,也就是略小于Math.pow(2, 1024),因為此值包括更大的值會當(dāng)做正無窮缔赠。最小值出現(xiàn)在上述的情況2中:分?jǐn)?shù)位最后一位為1衍锚,指數(shù)位為最后一位為1偏移1023后得到-1022,所以相乘得到最小值:Math.pow(2,-1074) == 5e-324 嗤堰。
補充:Math.pow(2,-1075)仍可得出此值戴质,但已經(jīng)沒有太大意義,以為此值已經(jīng)極小且精確度因為非零開始的分?jǐn)?shù)位減少而降低踢匣。

JS精確度是多少置森?

通過第一個問題我們知道了基于二進(jìn)制的雙精度浮點數(shù)并不能全部映射到整個實數(shù)范圍,實際上差的甚遠(yuǎn)符糊。即便是8倍精度也無法窮盡所有實數(shù)只是精確度更高,適應(yīng)范圍更廣呛凶。那么精確度是怎么消失的呢男娄?我們通常說的實數(shù)都是十進(jìn)制的,JS引擎里用的也是十進(jìn)制的漾稀,但是存儲卻是二進(jìn)制模闲,但是二進(jìn)制在轉(zhuǎn)十進(jìn)制時存在很多缺陷,分兩種情況說:第一種是整數(shù)崭捍,正整數(shù)能精準(zhǔn)表示的范圍是0到Math.pow(2, 53)尸折,因為通過調(diào)節(jié)指數(shù)分?jǐn)?shù)都可以變成一一對應(yīng)的整數(shù),但是超過這個范圍時就存在問題了殷蛇,因為已經(jīng)到了分?jǐn)?shù)能一一對應(yīng)的最大值实夹,例如:Math.pow(2, 53)到Math.pow(2, 54)這個區(qū)間的數(shù)字分?jǐn)?shù)(二進(jìn)制)每增加1,比如從0到1的改變會相當(dāng)于十進(jìn)制里的2個數(shù)字粒梦,且是偶數(shù)亮航;Math.pow(2, 54)到Math.pow(2, 55)區(qū)間則是代表4個數(shù)字;依次類推指數(shù)增長匀们。然后真正的JS引擎顯示時卻并非一定準(zhǔn)確依賴這個規(guī)則缴淋。所以整數(shù)的精確度為小于Math.pow(2, 53),小于15位的十進(jìn)制整數(shù)是準(zhǔn)確的。之后越來越不準(zhǔn)確重抖,直到超過21位會用指數(shù)顯示露氮。小數(shù)精確度也存在丟失現(xiàn)象和整數(shù)不同的是平常用的小數(shù)都存在這種現(xiàn)象比如0.1,用分?jǐn)?shù)表示是1/10钟沛,在可以表示的所有數(shù)里最接近的是:是一個分?jǐn)?shù)位循環(huán)的分?jǐn)?shù)0.000110011001100...(1100循環(huán))畔规,所以只能用能表示的數(shù)里最接近0.1這個值得數(shù)表示,小數(shù)不準(zhǔn)確的原因是無法跟實數(shù)一一對應(yīng)讹剔,精確度大概是17位油讯。

補充知識點:

js并非一種數(shù)字類型還有其他幾種比如32位和16位以及整數(shù),處于對整數(shù)精確度的需求有些瀏覽器實現(xiàn)了精確的十進(jìn)制表示:biginteger延欠。
js有兩種表示法:固定數(shù)字表示和科學(xué)計數(shù)法表示陌兑,前者用于小數(shù)點后少于5個0或者長度小于21位,否則使用以10為基底的科學(xué)計數(shù)法由捎。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末兔综,一起剝皮案震驚了整個濱河市色徘,隨后出現(xiàn)的幾起案子瘪阁,更是在濱河造成了極大的恐慌,老刑警劉巖请唱,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件心肪,死亡現(xiàn)場離奇詭異锭亏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)硬鞍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門慧瘤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人固该,你說我怎么就攤上這事锅减。” “怎么了伐坏?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵怔匣,是天一觀的道長。 經(jīng)常有香客問我桦沉,道長每瞒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任纯露,我火速辦了婚禮独泞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘苔埋。我一直安慰自己懦砂,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著荞膘,像睡著了一般罚随。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上羽资,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天淘菩,我揣著相機(jī)與錄音,去河邊找鬼屠升。 笑死潮改,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的腹暖。 我是一名探鬼主播汇在,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼脏答!你這毒婦竟也來了糕殉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤殖告,失蹤者是張志新(化名)和其女友劉穎阿蝶,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體黄绩,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡羡洁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了爽丹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筑煮。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖习劫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嚼隘,我是刑警寧澤诽里,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站飞蛹,受9級特大地震影響谤狡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜卧檐,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一墓懂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧霉囚,春花似錦捕仔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闪唆。三九已至,卻和暖如春钓葫,著一層夾襖步出監(jiān)牢的瞬間悄蕾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工础浮, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留帆调,地道東北人。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓豆同,卻偏偏與公主長得像番刊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子诱告,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容