【问题标题】:Javascript - What is the maximum number in scientific notation restricted by?Javascript - 科学记数法中的最大数字是多少?
【发布时间】:2017-05-31 08:07:32
【问题描述】:

在 JavaScript 中,我很想知道用科学记数法表示的最大可能的数字是多少,结果却没有得到“无穷大”,所以我写了一个小程序,发现就是这个:

17976931348623158079372897140530341507993413271003782693617377898044496829276475094664901797758720709633028641669288791094655554785194040263065748867150582068190890200070838367627385484581771153176447573027006985557136695962284291481986083493647529271907416844436551070434271155969950809304288017790417449779

可简写为1.7976931348623157e+308。

我的问题是,是什么让这个特定数字在 JavaScript 中成为可能的最大值?它是硬件相关的(可能最多一个 64 位?)还是特定于语言?为什么 308 是 10 的最大可用功率?

另外,它在其他语言中有何不同?

【问题讨论】:

  • tc39.github.io/ecma262/2017/… BTW 你可以简单地使用Number.MAX_VALUE 来获得这个值
  • 你还在考虑哪些其他语言?
  • @YuryTarabanko 无赖。好吧,反正这样做很有趣:)
  • @Hankrecords 考虑中间值。它们在记忆中是如何表现的?所以你有 308 个数字作为字符串,但是当你将它转换为数字引擎时使用 53 位来存储 308 个“正确”数字,对吧?
  • @Hankrecords,我误解你的问题了吗?

标签: javascript


【解决方案1】:

简答:
双精度浮点数。由于 double 数据类型的定义方式。

长答案:

所有浮点数(double 是双精度浮点数)都写为两个值的乘积,尾数和指数。原则上,这类似于用科学计数法编写数字:对于数字 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

浮点数(和双精度数)的不同之处在于,您将保存数字的总字节数分成两部分,一部分用于尾数,另一部分用于指数。

这给你一个 10 位的指数,以及一个指数的符号位,这样你就可以得到一个从 -1023 到 +1024 的数字。

但是,指数的底数不是 10,而是 2。浮点数指数的存储方式使用 8 位(对于浮点数)或 11 位(对于双精度数),这意味着您得到的指数值为 -127 到+128(浮动)或 -1023 到 +1024(双)。

而 2^1024 给我们的值是 1.797693134862315907729305190789 * 10^308,这是双精度浮点数的最大指数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-13
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 2020-12-30
    相关资源
    最近更新 更多