Actionscript 3 flash:Math.pow计算较大数字的错误答案

Actionscript 3 flash:Math.pow计算较大数字的错误答案,actionscript-3,flash,actionscript,actionscript-2,Actionscript 3,Flash,Actionscript,Actionscript 2,为什么会这样 当我尝试时: 数学功率(2,58)=28823037651711740 而事实上,它是28823037651711744 或 数学功率(2,57)=144115188075855870 而它实际上等于144115188075855872 它只是在没有任何警告的情况下抛出那个数字。 如果达到最大值时,它停止超过某个数值,我会理解。但是,这似乎正确地计算了前n个数字,然后仅在数字的末尾出错您已经超出了数字类型的显示精度。诀窍在于,当幂为2时,存储在变量中的实际值将是精确的,而当您跟踪它

为什么会这样

当我尝试时:

数学功率(2,58)=28823037651711740 而事实上,它是28823037651711744

数学功率(2,57)=144115188075855870 而它实际上等于144115188075855872

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

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

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

我的意思是,幂为2的数字的尾数为全零(和隐式前导一),并且有适当的指数部分,因此精确地存储在双精度数中。顺便问一下,双精度尾数64位中有56位是真的吗?维基百科说52。谢谢你的回答。现在我必须找到一种方法,如何在actionscript中表示一个非常大的数字。你有什么建议吗?例如,这个问题非常古老,任何编程语言都存在某些解决方案。(顺便说一句,这些对big LMGTFY的评论…嘿)我的意思是,一个2的幂的数字有一个全零的尾数(和一个隐式的前导1),并且有一个适当的指数部分,因此精确地存储在一个双精度数中。顺便问一下,双精度尾数64位中有56位是真的吗?维基百科说52。谢谢你的回答。现在我必须找到一种方法,如何在actionscript中表示一个非常大的数字。你有什么建议吗?例如,这个问题非常古老,任何编程语言都存在某些解决方案。(顺便说一句,这些评论是针对大LMGTFY…呵呵)