Javascript 为什么IE会给数学出错误的结果

Javascript 为什么IE会给数学出错误的结果,javascript,internet-explorer,floating-point,rounding,Javascript,Internet Explorer,Floating Point,Rounding,我的客户端应用程序记录了IE在Math.floor方面偶尔遇到的问题 以下是其中一个日志的示例: var d = 1442167625975 d / 16 = 90135476623.4375 Math.floor(d / 16) = -58836593 Math.floor = function floor() { [native code] } 我的第一个想法是,它可能是页面上的另一个脚本干扰了Math.floor,所以我开始记录它的实现 然后,我想知道这是否是一个浮点/溢出问题。用户代

我的客户端应用程序记录了IE在
Math.floor
方面偶尔遇到的问题

以下是其中一个日志的示例:

var d = 1442167625975
d / 16 = 90135476623.4375
Math.floor(d / 16) = -58836593
Math.floor = function floor() {
 [native code]
}
我的第一个想法是,它可能是页面上的另一个脚本干扰了
Math.floor
,所以我开始记录它的实现

然后,我想知道这是否是一个浮点/溢出问题。用户代理建议像Gecko一样使用32位IE(
Mozilla/5.0(Windows NT 6.1;Trident/7.0;SLCC2;.NET CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729;.NET CLR 3.0.30729;Media Center PC 6.0;.NET4.0E;BRI/2;rv:11.0),但在modern.IE虚拟机上测试上述日志后,我得到了预期的结果


这可能是怎么回事?

为什么IE可能会这样的答案通常是因为它的IEMath.floor似乎返回一个32位带符号整数(Firefox可以通过执行
Math.floor(1442167625975/16)| 0
)这证明了IE在Math.floor中仅限于32位。你确定现代IE也是32位的吗?CPU不应该是一个因素——当然,除了微软,你是否使用自己的Math.floor定义?为什么IE通常可能是因为它的IEMath.floor似乎返回一个32位带符号的整数(Firefox可以通过做
Math.floor(1442167625975/16)|0
)得到同样的结果,这证明IE在Math.floor中仅限于32位)你确定现代IE也是32位的吗?CPU不应该是一个因素-当然,除了微软,你是否使用自己的Math.floor定义?