在 Actionscript 3 中使用 Flash CS4 我键入以下内容:
trace(Math.pow(97,83) % 205);
结果是 86。但是如果我输入 Wolfram-Alpha:
97^83 mod 205
我得到 13,这是正确的答案。为什么 actionscript 显示错误的值?
谢谢,
Y_Y
最佳答案
这是由于 Number 类型的浮点精度所致。 Flash 仅使用 64 位来表示 Math.pow(97,83) 的结果,其中 53 位用于描述浮点数的尾数部分。使用 53 位时,在需要舍入数字之前,您只能获得大约 15-16 位的精度。由于 Math.pow(97,83) 是一个大约 164 位长的数字,Flash 保持形式为 7.98093813043768e+164 的近似值
由于精度损失,这不是 Math.pow(97,83) 的确切值,因此在计算 mod 时会产生不好的结果。
Wolfram-Alpha 可能使用专门的库来计算大数而不会损失精度。我不知道 Actionscript 3 有任何这样的库,但谷歌可能会在那里提供帮助;)
关于actionscript-3 - 为什么 Actionscript 为大值的模数显示不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10380824/