javascript 整数が53bit(2の53乗)-1の範囲であるかを判定する

javascript 整数が53bit(2の53乗)-1の範囲であるかを判定する

javascriptで、isSafeIntegerを使って、整数が53bit(2の53乗)-1である「 9007199254740991 」の範囲であるかを判定するサンプルコードを記述してます。

環境

  • OS windows10 pro 64bit
  • Apache 2.4.43
  • ブラウザ chrome 84.0.4147.105

isSafeInteger使い方

isSafeIntegerを使用すると、利用しようとしている整数が53bit(2の53乗)-1である「 9007199254740991 」の範囲であるかを判定することが可能です。

console.log(
  Number.isSafeInteger( Math.pow( 2, 53 ) - 1 ) // true
);

console.log(
  Number.isSafeInteger( Math.pow( 2, 53 ) ) // false
);

console.log(
  Number.isSafeInteger( -Math.pow( 2, 53 ) ) // false
);

「NaN」や「Infinity」も「false」になります。

console.log(
  Number.isSafeInteger( NaN ) // false
);

console.log(
  Number.isSafeInteger( Infinity ) // false
);

ちなみに、BigIntを使用しないと、53bit(2の53乗)である「 9007199254740992 」以上の数値を扱うと以下のように結果がおかしくなります。

console.log(
  Math.pow( 2, 53 ) + 1
);

console.log(
  Math.pow( 2, 53 )
);

// bigint使用
console.log(
  2n ** 53n + 1n
);

実行結果