Javascript:这是真正签名整数部门吗?

前端之家收集整理的这篇文章主要介绍了Javascript:这是真正签名整数部门吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
给定以下代码,其中a和b都是表示带符号32位有符号整数范围内的值的数字:
var quotient = ((a|0) / (b|0))|0;

并且假设运行时完全符合ECMAScript 6规范,商的值始终是a和b的正确有符号整数除以整数?换句话说,这是在JavaScript中实现相当于机器指令的真正有符号整数除法的正确方法吗?

解决方法

我不是浮点数的专家,但是 Wikipedia表示双精度有52位精度.在逻辑上,似乎52位应该足以可靠地近似32位整数的整数除数.

最小和最大32位有符号的整数-2147483648 / 2147483647分配产生-1.0000000004656613,这仍然是有效数字的合理数量.同样的,它的逆,2147483647 / -2147483648,它产生-0.9999999995343387.

一个例外是division by zero,我在评论中提到.正如所关联的SO问题所述,整除除零通常会抛出某种错误,而浮点强制则导致(1/0)| 0 == 0.

更新:根据another SO answer,C中的整数除法截断为零,这是JavaScript中的| 0.另外,除以0是未定义的,所以JavaScript在返回零时在技术上不是不正确的.除非我错过任何其他事情,原来的问题的答案应该是肯定的.

更新2:ECMAScript 6规范的相关章节:如何divide numbersconvert to a 32-bit signed integer,这是what |0 does.

猜你在找的JavaScript相关文章