0

为什么会这样?

当我尝试时:

Math.pow(2,58)=288230376151711740 而实际上是 288230376151711744

或者

Math.pow(2,57)=144115188075855870 而它实际上等于 144115188075855872

它只是在没有任何警告的情况下抛出该数字。如果达到最大值,我会理解它是否停止超过某个数字。但是,这似乎正确计算了前 n 位数字,然后仅在数字的末尾出错

4

1 回答 1

3

您已经用完了 Number 类型的显示精度。诀窍是,使用 2 的幂,存储在变量中的实际值将是精确的,而当您跟踪它时,引擎会将显示的值截断 16 位,因为它在处理过程中除以 10,并且剩余部分最终会命中如果与没有指数部分的原始值相比,则为“机器零”。这是为了防止显示不精确的浮点除法产生的白噪声。如果您要使用比双精度数存储更多位的大整数/浮点数,则可以解决此问题。

于 2013-01-14T05:27:16.427 回答