为什么Actionscript会显示大值模数的不同值?

Y_Y*_*Y_Y 4 flash actionscript-3

使用Flash CS4和Actionscript 3我输入以下内容:

 trace(Math.pow(97,83) % 205);
Run Code Online (Sandbox Code Playgroud)

结果是86.但是如果我键入Wolfram-Alpha:

 97^83 mod 205
Run Code Online (Sandbox Code Playgroud)

我得到13这是正确的答案.为什么动作脚本显示错误的值?

谢谢,Y_Y

God*_*her 9

这是由于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的任何这样的库,但谷歌可能会帮助那里;)

  • 谷歌搜索"as3 biginteger"将产生一些相关的结果. (3认同)