微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.

原文地址:https://www.jb51.cc/js/152444.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐