正如这里的问题所述,即使是最新的 Ecmascript 8 也不支持 64 位整数。
但是bigInt的第 3 阶段提案看起来很有希望,我预计很快就会将其添加到 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 真的这么做了,会出现什么问题?
编辑:正如 TJ 所说,我们可以使用后缀代替构造函数,但我仍然觉得这不完全是通用符号
(Q1) 无法以一般方式表示大数字背后的技术原因是什么?
打破网络。JavaScript 数字的基本原理现在不能改变,在它们最初定义 20 多年后。还有性能问题:由于内置在 CPU 和数学协处理器中,JavaScript 的当前数字(IEEE-754 二进制双精度 [64 位] 精度)是非常快的浮点数。这种速度的代价是精度;任意精度(或显着更大的精确范围)的成本是性能。
未来的某一天,如果这些格式(2008 年引入)扩散到生态系统中并获得硬件支持,那么JavaScript 可能会获得 IEEE-754 64 位甚至 128 位十进制浮点数(参见此处和此处)。但这是我的猜测。:-)
(Q2) 为什么 Javascript 不能使用其他一些不会失去精度的标准来表示所有数字?
见 Q1。:-)
(Q3) 如果 Javascript 真的这么做了,会出现什么问题?
见 Q1。:-)
即使根据提案,我们也必须使用特殊的构造函数来声明大数。
如果你特别想要 64 位。如果您只想要 BigInts,该提案将包含一个新符号,即n
后缀:2n
is a BigInt 2。因此,对于 BigInts,您的示例将是
let bigNum = 2n ** 64n;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句