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.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...