有没有人遇到过关于int和uint算术如何在Actionscript 3中运行的权威规范?("权威"是指"来自Adobe"或"已被Adobe宣布为权威").特别是我正在寻找一种支持的方法来做整数乘法模2 32.我无法找到的任何Adobe文档都没有涵盖这一点.
Actionscript声称基于ECMAScript,但ECMAScript根本不进行整数运算.它在IEEE-754双打上完成所有操作,并在按位运算之前减少模数2 32,在大多数情况下模拟整数运算.但是,这对于乘法不起作用:乘法的真实结果,例如,0x10000001*0x0FFFFFFF对于双尾数的尾数来说太长,因此如果遵循规范,则低位将丢失.
现在输入Actionscript.我已经通过实验发现,将两个int
或多个uint
变量相乘并立即将产品投入int
或uint
总是给我确切的结果.但是,生成的AVM2字节码只包含一个普通的"mul"指令,没有直接指示它应该产生整数结果而不是浮点结果; 虚拟机必须向前看以找到它.我担心我在实验中幸运,并获得额外的精确度作为奖励,而不是我可以依赖的东西.
(首先,我的实验都是使用x86 Flash播放器进行的.也许它代表中间结果,因为Intel 80位加倍,或者在评估堆栈上存储64位int,直到知道它将用于什么.在没有原生32×32→64乘法指令的非x86平板电脑上很容易实现,那么VM是否可以决定将精度降低到ECMAScript标准指定的范围?)
24小时状态:迈克威尔士做了一些有能力的调查并提供了非常有用的链接,但遗憾的是还不足以解决这个问题.还有谁?
(tl;博士在评论中辩论:whitequark在某种程度上反驳了我的假设理由之一,为什么答案可能是"不".他的观点有其优点,但当然不能表明答案是"是" ).