From 116fb97369447c206950b9bafcc107044b2b816c Mon Sep 17 00:00:00 2001 From: suin Date: Fri, 7 Aug 2026 20:47:42 +0900 Subject: [PATCH] =?UTF-8?q?number=E5=9E=8B=E3=81=AE=E5=AE=89=E5=85=A8?= =?UTF-8?q?=E3=81=AA=E6=95=B4=E6=95=B0=E3=81=AE=E8=AA=AC=E6=98=8E=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 対象者 - [x] 📖 読者 ## Problem number型のページでは、正確に扱える数値の範囲を説明していました。しかし、この表現では範囲外の値を正確に表現できないように読めました。また、安全な整数の範囲を超えると数学上は異なる整数が同じnumber値として扱われる理由を説明していませんでした。 ## Solution すべての整数を正確に区別して扱える安全な整数の範囲を明記しました。あわせて、`2 ** 53`と`2 ** 53 + 1`が同じnumber値として比較されるコード例を追加しました。 ## Value 読者が安全な整数の範囲の意味と、範囲外の整数をnumber型で扱うリスクを理解できるようになります。 --- close #1136 --- .../values-types-variables/number/README.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/reference/values-types-variables/number/README.md b/docs/reference/values-types-variables/number/README.md index 171cb480..4db6d73b 100644 --- a/docs/reference/values-types-variables/number/README.md +++ b/docs/reference/values-types-variables/number/README.md @@ -84,7 +84,21 @@ const count: number = 123; ## 数値の範囲 -JavaScriptのnumber型は、IEEE 754の倍精度浮動小数です。64ビットのうち、52ビットが数値の格納に、11ビットが小数の位置に、1ビットが正負符号に使われます。正確に扱える数値は`-(2^53 − 1)`から`2^53 − 1`の間です。整数について言うと、他言語の64ビット整数型の範囲より狭いので注意しましょう。 +JavaScriptのnumber型は、IEEE 754の倍精度浮動小数です。64ビットのうち、52ビットが数値の格納に、11ビットが小数の位置に、1ビットが正負符号に使われます。 + +JavaScriptの`number`型で、すべての整数を正確に区別して扱える範囲は、`-(2^53 − 1)`以上`2^53 − 1`以下です。この範囲を安全な整数の範囲と呼びます。 + +この範囲を超えると、数学上は異なる整数が同じ`number`値として扱われることがあります。 + +```ts twoslash +const a = 2 ** 53; +const b = a + 1; + +console.log(a === b); +// @log: true +``` + +整数について言うと、他言語の64ビット整数型の範囲より狭いので注意しましょう。 ## 特殊な数値