gpt4 book ai didi

actionscript-3 - as3 数字类型 - 大数字的逻辑问题

转载 作者:行者123 更新时间:2023-12-04 04:27:23 29 4
gpt4 key购买 nike

我很好奇我们团队中发现的一个数量非常多的问题:

var n:Number = 64336512942563914;
trace(n < Number.MAX_VALUE); // true
trace(n); // 64336512942563910

var a1:Number = n +4;
var a2:Number = a1 - n;
trace(a2); // 8 Expect to see 4
trace(n + 4 - n); // 8

var a3:Number = parseInt("64336512942563914");
trace(a3); // 64336512942563920

n++;
trace(n); //64336512942563910
trace(64336512942563914 == 64336512942563910); // true

这是怎么回事?

尽管 n 很大,但它小于 Number.MAX_VALUE,所以为什么我会看到这种奇怪的行为?

我认为这可能是在被 trace 输出时格式化大数字的问题,但这并不能解释 n + 4 - n == 8

这是一些奇怪的 float 问题吗?

最佳答案

是的,这是一个 float 问题,但并不奇怪。这都是预期的行为。

AS3 中的数字数据类型实际上是“IEEE 二进制浮点运算标准 (IEEE-754) 指定的 64 位 double 格式”(source)。因为您分配给 n 的数字太多,无法放入 64 位,所以它会四舍五入,这就是所有“奇怪”结果的原因。

如果你需要做一些精确的大整数运算,你将不得不使用一个自定义的大整数类,例如this one .

关于actionscript-3 - as3 数字类型 - 大数字的逻辑问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7568449/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com