2017-05-31 27 views
4

在JavaScript中,我很好奇,想看看究竟是什麼最大可能數以科學計數法表示的沒有得到「無限」的結果,所以我寫了一個小程序,並發現它是這一個:Javascript - 受科學記數法限制的最大數量是多少?

17976931348623158079372897140530341507993413271003782693617377898044496829276475094664901797758720709633028641669288791094655554785194040263065748867150582068190890200070838367627385484581771153176447573027006985557136695962284291481986083493647529271907416844436551070434271155969950809304288017790417449779 

可以縮寫爲1.7976931348623157e + 308。

我的問題是,什麼使得這個特定的數字在JavaScript中最大可能?它是否依賴於硬件(可能是64位上最大的一個?)還是語言特定的?爲什麼308的最大可用功率是10?

而且,它在其他語言中有何不同?

+1

https://tc39.github.io/ecma262/2017/#sec-terms-and-definitions-number-value順便說一句,你可以簡單地使用'Number.MAX_VALUE'來得到這個值 –

+0

你在想什麼其他的語言關於? – Icepickle

+0

@YuryTarabanko Bummer。那麼,這是很有趣的,無論如何:) – Hankrecords

回答

6

簡短回答:
雙精度浮子。由於雙數據類型是如何定義的。

龍答:

所有浮點數(雙是一個雙精度浮點數)被寫成兩個值的乘積,尾數和指數。原則上,這種工作原理類似於數字是如何寫在科學記數法:對於數1.34 * 10^24,尾數爲1.34,而指數爲24

https://en.wikipedia.org/wiki/Double-precision_floating-point_format

Number.MAX_VALUE

Number.MAX_VALUE的值是Number類型的最大正有限值,大約爲1.7976931348623157e + 308。

此屬性具有屬性{ [[Writable]]: false, [[Enumerable]]: fafalselse, [[Configurable]]: false }

http://ecma262-5.com/ELS5_HTML.htm#Section_8.5

什麼不同花車(雙打)是拆分持有數量分爲兩個部分,一個尾數和一個指數的總字節數。 double-precision binary floating-point format: binary64

這給出了10位的指數和指數的一個符號位,所以這會給你一個從-1023到+1024的數字。

但是,指數的基數不是10,而是2.存儲浮點數指數的方式使用8位(浮點數)或11位(用於雙精度),這意味着您的指數值爲-127到+128(浮動)或-1023到+1024(兩倍)。

而2^1024給出的值爲1.797693134862315907729305190789 * 10^308,它是雙精度浮點數的最大指數。