【问题标题】:AS3: Adding 2 positive integers yield negative integerAS3:添加 2 个正整数产生负整数
【发布时间】:2013-04-19 04:05:50
【问题描述】:

我在 AS3 中制作了帕斯卡三角形。

在结果中我发现,1037158320 和 1166803110 相加得到 -2091005866,一个负整数!

这很奇怪。我一开始以为int 的大小太大了,但总和的大小甚至比两个加数还要大。

此外,当一个数字接近帕斯卡三角形的一条线的中心时,它应该会增加,但 -2091005866 旁边的是 -1961361076,它更接近中心但幅度会减小!

任何可能的解决方案?

【问题讨论】:

    标签: actionscript-3 int addition integer-overflow


    【解决方案1】:

    引用ActionScript 3.0 Reference:

    int 类允许您使用表示 32 位的数据类型 有符号整数。 int 类表示的值的范围是 -2,147,483,648 (-2^31) 到 2,147,483,647 (2^31-1)。

    1037158320 + 1166803110 = 2203961430,大于 2147483647。

    考虑使用uintNumber

    【讨论】:

    • +1 表示数字。在 AS3 中,Number 能够包含 64 位整数精度,以及双精度浮点值。
    • 在此处使用如此大的数字时也应避免使用 uint,因为 uint 的最大值为 2^32-1(42 亿),这在处理如此大的数字时并不是很多.相比之下,Number 的最大值为 1.79e+308
    • @Vesper,“在 AS3 中,数字能够包含 64 位整数精度”它不完全正确,数字是 IEEE754 双精度 64 位,所以它只保留 52 位的尾数,所以不损失精度的最大整数是 0xFFFFFFFFFFFFF = 4503599627370495
    • 我检查了文档以确保实际的最大整数甚至是 53 位(0x1FFFFFFFFFFFFF = 9007199254740991),因为系统存储 Double 的方式有 1 个额外的位)
    猜你喜欢
    • 1970-01-01
    • 2015-10-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 2014-12-18
    • 2019-12-05
    相关资源
    最近更新 更多