是否有一种明确的方法来判断两个整数的和是否大于max int ?
Javascript: is there a definite way to tell if the sum of two integers is greater than max int?
我正试图写一个测试来检查两个任意整数的和是否> 9007199254740992或<-9007199254740992。当这种情况发生时,js是否始终以可测试的方式运行?
根据MDN, JavaScript使用IEEE 754中指定的双精度浮点格式数字。
因此实际安全边界为max == Math.pow(2,53)-1
和min == -(Math.pow(2, 53)-1)
。这些被封装在ECMAScript 6 Number
类常量中:
Number.MAX_SAFE_INTEGER; // == 9007199254740991
Number.MIN_SAFE_INTEGER; // == -9007199254740991
考虑到这些限制,这里有一个函数应该满足您的要求,以显示在添加时何时可以溢出或下溢:
function additionWillOverflow(x,y) {
if( y > 0 ) {
return x > Number.MAX_SAFE_INTEGER - y;
}
return x < Number.MIN_SAFE_INTEGER - y;
}
这里有两个说明性的测试用例:
var x = 9007199254740990;
var y = 3;
console.log( additionWillOverflow(x,y) ); // true
console.log( x + y ); // 9007199254740992(!) - overflow
x = -9007199254740990;
y = -3;
console.log( additionWillOverflow(x,y) ); // true
console.log( x + y ); // -9007199254740992(!) - underflow
由于上面提到的浮点表示,从2^53开始,javascript只能表示每秒钟整数。From 2^54 js只能表示每四个整数,以此类推。这种行为在任何兼容的实现中都应该是一致的(还没有全部测试过),并且是浮点数的工作方式(查看维基百科了解更多信息)。
注意,对于任何数值,调用isNan(x+y)
或isFinite(x+y)
分别返回false
和true
,即使它们在MAX_SAFE_INTEGER范围之外(即使调用错误的数字结果)。
希望对你有帮助。
相关文章:
- javascript测试是否存在两个标志中的任何一个
- 检查来自不同数组的两个元素的一个属性是否相等
- 如何检查两个字符串是否具有相同的字符,包括特殊字符
- JavaScript:检查变量是否等于两个或多个值之一的简单方法
- Javascript如何确定两个对象是否相同
- 测试两个版本的 json 架构是否向后兼容
- 测试两个变量是否包含一些数据 JavaScript
- 检查两个或多个 DOM 元素是否重叠
- Javascript-如何验证两个电话号码是否不同
- 使用WebRTC对等连接进行两个以上参与者的视频会议是否可行
- 异步函数调用是否可以在两个同步语句之间完成
- 是否存在添加两个相同事件处理程序的默认行为
- 找出LngLat点是否在另外两个点之间
- 是否有任何功能可以合并两个JSON数据集并替换旧信息?(节点.JS)
- 检查qunit中是否有两个异步调用
- 确定两个HTML元素在没有ID的情况下是否不同
- 函数来检查给定整数数组中给定位置的元素是否大于其两个邻域
- 如何确定两个凹/凸形状是否处于特定距离
- 如何确定数组中的值是否位于两个附加数组的所有并行索引的值之间
- 当有两个浏览器实例时,如何检查浏览器会话是否存在