これは言語によって定義されていますか? 定義された最大値はありますか? ブラウザによって異なるのでしょうか?
ベストアンサー1
JavaScript には 2 つの数値型があります。Number
そしてBigInt
。
最も頻繁に使用される数値型は、Number
64ビット浮動小数点数である。IEEE754 規格番号。
このタイプの最大の正確な積分値はNumber.MAX_SAFE_INTEGER
つまり、
- 2 53 -1、または
- +/- 9,007,199,254,740,991、または
- 九千兆 七兆 百九十九億 二百五十四百万 七百四十一
これをわかりやすく説明すると、1 京バイトは 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 をエンコードしているのかが不明確だからです。