Javascript中对64位浮点的本机支持

问题描述 投票:0回答:1

正如问题here所述,即使最新的Ecmascript 8也不支持64位整数。

但是bigInt的stage 3 proposal看起来很有希望,我预计它很快就会被添加到Js规范中。

但是,即使根据提案,我们也必须使用特殊的构造函数来声明大数字。 (Q1)背后的技术原因是什么,无法以一般方式代表大数字?

let bigNum = 2 ** 64 // Why can't JS do this without losing precision? (at least in future)

我知道JavaScript代表使用IEEE-754双精度(64位)浮点的所有数字,这导致了这个问题。

(Q2)为什么Javascript不能使用其他一些不丢失精度的标准代表所有数字?

(Q3)如果Javascript真的那样会出现什么并发症?

编辑:正如T.J所述,我们可以使用后缀而不是构造函数,但我仍然认为这不是一般的表示法

javascript 64bit ecmascript-next
1个回答
1
投票

(Q1)背后的技术原因是什么,无法以一般方式代表大数字?

打破网络。 JavaScript数字的基本原理现在无法改变,最初定义后20多年。还有性能问题:由于内置于CPU和数学协处理器中,JavaScript的当前数字(IEEE-754二进制双精度[64位]精度)是非常快的浮点数。这种速度的成本是精确的;任意精度(或显着更大的精确范围)的成本是性能。

将来的某一天,如果这些格式(2008年推出)扩散到生态系统并获得硬件支持,那么JavaScript可能会获得IEEE-754 64位甚至128位十进制浮点数(请参阅herehere)。但这是我的猜测。 :-)

(Q2)为什么Javascript不能使用其他一些不丢失精度的标准代表所有数字?

见Q1。 :-)

(Q3)如果Javascript真的那样会出现什么并发症?

见Q1。 :-)

即使按照提议,我们也必须使用特殊的构造函数来声明大数字。

如果你想特别64位。如果您只想要BigInts,该提案包含一个新的符号,即n后缀:2n是一个BigInt 2.所以对于BigInts,你的例子是

let bigNum = 2n ** 64n;
© www.soinside.com 2019 - 2024. All rights reserved.