「JavaScript/Number/MIN VALUE」の版間の差分
imported>Ef3 <math> |
(相違点なし)
|
2025年3月3日 (月) 17:27時点における最新版
[[../../Number/MIN_VALUE|Number.MIN_VALUE]] は、ECMAScript における [[../../Number|Number]] オブジェクトのプロパティで、JavaScript で表現可能な最小の正の値を表します。この値は、IEEE 754 浮動小数点数の仕様に基づいており、約 の値を持ちます[1]。
構文
Number.MIN_VALUE
値
[[../../Number/MIN_VALUE|Number.MIN_VALUE]] の値は、IEEE 754 倍精度浮動小数点数形式で表現可能な最小の正の数値である約 です。これは と等価です。
特性
[[../../Number/MIN_VALUE|Number.MIN_VALUE]] には、以下のような特性があります:
- 読み取り専用: このプロパティは変更できません。プロパティ属性は { [[Writable]]:
[[../../false|false]], [[Enumerable]]:[[../../false|false]], [[Configurable]]:[[../../false|false]]} に設定されています。 - データプロパティ:
[[../../Number/MIN_VALUE|Number.MIN_VALUE]]は値プロパティであり、メソッドではありません。 - 正の値:
[[../../Number/MIN_VALUE|Number.MIN_VALUE]]は[[../../0|0]]より大きい最小の正の値です。負の最小値ではないことに注意してください。 - 比較:
[[../../0|0]]より大きく、他のすべての正の数値より小さいです。
例
基本的な使用法
以下のプログラムは、[[../../Number/MIN_VALUE|Number.MIN_VALUE]] の基本的な使用法を示しています。
// Number.MIN_VALUE の値を表示 console.log(Number.MIN_VALUE); // 5e-324 // Number.MIN_VALUE の型を確認 console.log(typeof Number.MIN_VALUE); // number // Number.MIN_VALUE は正の数 console.log(Number.MIN_VALUE > 0); // true
このプログラムでは、[[../../Number/MIN_VALUE|Number.MIN_VALUE]] の値とその型が通常の数値型であり、0より大きい値であることを示しています。
下限値の未満
以下のプログラムは、[[../../Number/MIN_VALUE|Number.MIN_VALUE]] より小さい正の値が [[../../0|0]] になる例を示しています。
// MIN_VALUE より小さい正の値 console.log(Number.MIN_VALUE / 2); // 0 // MIN_VALUE と 0 の比較 console.log(Number.MIN_VALUE > 0); // true console.log(Number.MIN_VALUE / 10 === 0); // true // アンダーフロー console.log(Number.MIN_VALUE * Number.MIN_VALUE); // 0
このプログラムでは、[[../../Number/MIN_VALUE|Number.MIN_VALUE]] より小さい正の値が生成されると [[../../0|0]] として扱われる現象(アンダーフロー)を示しています。
数値演算における MIN_VALUE
以下のプログラムは、[[../../Number/MIN_VALUE|Number.MIN_VALUE]] を含む様々な数値演算の結果を示しています。
// MIN_VALUE を含む基本的な演算 console.log(Number.MIN_VALUE + Number.MIN_VALUE); // 1e-323 (MIN_VALUEの2倍) console.log(Number.MIN_VALUE * 2); // 1e-323 (同上) console.log(1 + Number.MIN_VALUE); // 1 (精度の制限により、1と同じ値になる) // 特殊な演算 console.log(Number.MIN_VALUE / 0); // Infinity console.log(-Number.MIN_VALUE); // -5e-324 console.log(1 / Number.MIN_VALUE); // 2e+323 (とても大きな値)
このプログラムでは、[[../../Number/MIN_VALUE|Number.MIN_VALUE]] を含む演算の結果と、浮動小数点数の精度による制限を示しています。
比較演算
以下のプログラムは、[[../../Number/MIN_VALUE|Number.MIN_VALUE]] を含む比較演算の結果を示しています。
// 比較演算 console.log(Number.MIN_VALUE < 0.1); // true console.log(Number.MIN_VALUE > 0); // true // 等価比較 console.log(Number.MIN_VALUE === Number.MIN_VALUE); // true console.log(Number.MIN_VALUE === 0); // false // isFinite による検証 console.log(isFinite(Number.MIN_VALUE)); // true console.log(Number.isFinite(Number.MIN_VALUE)); // true
このプログラムでは、[[../../Number/MIN_VALUE|Number.MIN_VALUE]] が他の数値との比較においてどのように振る舞うかを示しています。特に、[[../../Number/MIN_VALUE|Number.MIN_VALUE]] は [[../../0|0]] より大きく、有限の値であることを確認できます。
実用的な例
許容誤差の設定
以下のプログラムは、浮動小数点計算における許容誤差として [[../../Number/MIN_VALUE|Number.MIN_VALUE]] を使用する例を示しています。
// 浮動小数点の比較関数(誤差許容) function nearlyEqual(a, b, epsilon = Number.MIN_VALUE) { const diff = Math.abs(a - b); // a または b が 0 の場合の特別処理 if (a === 0 || b === 0 || diff < Number.MIN_VALUE) { return diff < (epsilon * Number.MIN_VALUE); } // a と b の相対誤差を計算 const absA = Math.abs(a); const absB = Math.abs(b); return diff / Math.min(absA + absB, Number.MAX_VALUE) < epsilon; } console.log(nearlyEqual(0.1 + 0.2, 0.3, 1e-14)); // true console.log(nearlyEqual(1e-10, 1.000000000001e-10, 1e-10)); // true console.log(nearlyEqual(1, 1.001, 1e-3)); // true console.log(nearlyEqual(1, 1.001, 1e-4)); // false
このプログラムでは、浮動小数点数の比較において発生する精度の問題に対処するため、許容誤差を設定する例を示しています。[[../../Number/MIN_VALUE|Number.MIN_VALUE]] を基準にすることで、非常に小さな値も適切に比較できます。
アンダーフロー検出
以下のプログラムは、数値計算でアンダーフローが発生したかどうかを検出する例を示しています。
// アンダーフロー検出関数 function detectUnderflow(originalValue, computedValue) { // 元の値が非常に小さく、計算結果が 0 になった場合 if (Math.abs(originalValue) < Number.MIN_VALUE * 10 && computedValue === 0) { console.log('アンダーフローが発生しました。元の値は非常に小さいです。'); return true; } return false; } const smallValue = Number.MIN_VALUE; const computedValue = smallValue / 2; // 0 になる console.log(detectUnderflow(smallValue, computedValue)); // true console.log(detectUnderflow(1, 0)); // false
このプログラムでは、非常に小さな値を計算した結果、アンダーフローが発生して [[../../0|0]] になったかどうかを検出する関数の例を示しています。
Number.MIN_VALUE と小さな数値
[[../../Number/MIN_VALUE|Number.MIN_VALUE]] に関する誤解を避けるための重要なポイントをいくつか示します:
- 最小値ではなく最小正値:
[[../../Number/MIN_VALUE|Number.MIN_VALUE]]は最小の正の値です。負の方向での最小値(最も小さい値)は-Number.MAX_VALUEです。 - ゼロより大きい:
[[../../Number/MIN_VALUE|Number.MIN_VALUE]]は小さいですが、0 よりは大きい値です。 - アンダーフロー:
[[../../Number/MIN_VALUE|Number.MIN_VALUE]]よりも小さい正の値は、JavaScript では[[../../0|0]]として表現されます(アンダーフロー)。
// MIN_VALUE と負の値の関係 console.log(Number.MIN_VALUE > 0); // true console.log(Number.MIN_VALUE > -1); // true console.log(-Number.MAX_VALUE < Number.MIN_VALUE); // true // MIN_VALUE とアンダーフロー console.log(Number.MIN_VALUE / 2); // 0 console.log(Number.MIN_VALUE * Number.MIN_VALUE); // 0 // 最も小さい負の値 console.log(-Number.MAX_VALUE); // -1.7976931348623157e+308
その他の Number オブジェクトの特殊値
ECMAScript は、[[../../Number|Number]] オブジェクトに他の特殊な値も定義しています:
[[../../Number/POSITIVE_INFINITY|Number.POSITIVE_INFINITY]]: 正の無限大[[../../Number/NEGATIVE_INFINITY|Number.NEGATIVE_INFINITY]]: 負の無限大[[../../Number/NaN|Number.NaN]]: 数値ではない値[[../../Number/MAX_VALUE|Number.MAX_VALUE]]: 表現可能な最大の正の値[[../../Number/MAX_SAFE_INTEGER|Number.MAX_SAFE_INTEGER]]: 安全に表現できる最大の整数[[../../Number/MIN_SAFE_INTEGER|Number.MIN_SAFE_INTEGER]]: 安全に表現できる最小の整数[[../../Number/EPSILON|Number.EPSILON]]: 数値の丸め誤差を表す最小値
脚註
- ↑
[[../../Number/MIN_VALUE|Number.MIN_VALUE]]は JavaScript の数値表現における正の最小値であり、これより小さい正の値は[[../../0|0]]として表現されます。