1. ホーム
  2. javascript

[解決済み] JavaScriptで、数値が精度を失うことなく到達できる最も高い整数値は何ですか?

2022-03-17 09:44:57

質問内容

これは言語によって定義されているのでしょうか?最大値は決まっているのでしょうか?ブラウザによって違うのですか?

解決方法は?

JavaScriptには2つの数値型があります。 Number BigInt .

最も使用頻度の高い数値の種類です。 Number は、64ビット浮動小数点 IEEE 754 の数です。

この型の最大の正確な積分値は Number.MAX_SAFE_INTEGER である。

  • 2 53 -1、または
  • +/- 9,007,199,254,740,991, または
  • 9兆7,000億円 19兆9,000億円 2兆5,400万円 7兆4,000万円 9兆9,000万円

ちなみに、1兆バイトはペタバイト(1,000テラバイト)に相当します。

ここでいう「安全」とは、整数を正確に表現し、正しく比較する能力のことである。

仕様書より

ただし,正負の整数で,その大きさが 2より大きい 53 で表現可能です。 Number 型(実際 整数0は+0と-0の2つの表現がある)。

これより大きな整数を安全に使うには BigInt であり、上限がない。

ビット演算子やシフト演算子は32ビット整数を操作するので、その場合、安全な整数の最大値は2であることに注意してください。 31 -1、つまり2,147,483,647です。

const log = console.log
var x = 9007199254740992
var y = -x
log(x == x + 1) // true !
log(y == y - 1) // also true !

// Arithmetic operators work, but bitwise/shifts only operate on int32:
log(x / 2)      // 4503599627370496
log(x >> 1)     // 0
log(x | 1)      // 1


9,007,199,254,740,992という数値に関する技術的なメモ:この値には正確なIEEE-754表現があり、この値を変数に代入したり読み出したりできるので、たとえば くれぐれも この値以下の整数の領域で選択されたアプリケーションでは、この値を最大値として扱うことができます。

一般に、このIEEE-754の値は、論理値9,007,199,254,740,992を符号化しているのか、9,007,199,254,740,993を符号化しているのかあいまいなため、不正確として扱う必要があります。