Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:有没有明确的方法来判断两个整数的和是否大于max int?_Javascript_Integer - Fatal编程技术网

Javascript:有没有明确的方法来判断两个整数的和是否大于max int?

Javascript:有没有明确的方法来判断两个整数的和是否大于max int?,javascript,integer,Javascript,Integer,我正在尝试编写一个测试来检查两个任意整数的和是否大于9007199254740992或小于-9007199254740992。发生这种情况时,js是否始终以可测试的方式运行?根据中指定的JavaScript使用 因此,实际的安全界限是max=Math.pow(2,53)-1和min=-(Math.pow(2,53)-1)。它们封装在ECMAScript 6Numberclass常量中: Number.MAX_SAFE_INTEGER; // == 9007199254740991 Number.

我正在尝试编写一个测试来检查两个任意整数的和是否大于9007199254740992或小于-9007199254740992。发生这种情况时,js是否始终以可测试的方式运行?

根据中指定的JavaScript使用

因此,实际的安全界限是max=
Math.pow(2,53)-1
和min=
-(Math.pow(2,53)-1)
。它们封装在ECMAScript 6
Number
class常量中:

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;
}
由于上面提到的浮点表示,从2^53开始,javascript只能表示每秒一个整数。从2^54开始,js只能表示每四分之一个整数,以此类推。这种行为在任何兼容的实现中都应该是一致的(还没有全部测试过),这也是浮点数的工作方式(请检查)

请注意,对任何数值分别调用
isNan(x+y)
isFinite(x+y)
返回
false
true
,即使它们超出了最大安全整数范围(即使在错误的数值结果上调用)

希望这能有所帮助。

从以下几点开始并消化:
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