JavaScript/Number/MIN VALUE
Number.MIN_VALUE
は、ECMAScript における Number
オブジェクトのプロパティで、JavaScript で表現可能な最小の正の値を表します。この値は、IEEE 754 浮動小数点数の仕様に基づいており、約 の値を持ちます[1]。
構文
Number.MIN_VALUE
値
Number.MIN_VALUE
の値は、IEEE 754 倍精度浮動小数点数形式で表現可能な最小の正の数値である約 です。これは と等価です。
特性
Number.MIN_VALUE
には、以下のような特性があります:
- 読み取り専用: このプロパティは変更できません。プロパティ属性は { [[Writable]]:
false
, [[Enumerable]]:false
, [[Configurable]]:false
} に設定されています。 - データプロパティ:
Number.MIN_VALUE
は値プロパティであり、メソッドではありません。 - 正の値:
Number.MIN_VALUE
は0
より大きい最小の正の値です。負の最小値ではないことに注意してください。 - 比較:
0
より大きく、他のすべての正の数値より小さいです。
例
基本的な使用法
以下のプログラムは、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
の値とその型が通常の数値型であり、0より大きい値であることを示しています。
下限値の未満
以下のプログラムは、Number.MIN_VALUE
より小さい正の値が 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
より小さい正の値が生成されると 0
として扱われる現象(アンダーフロー)を示しています。
数値演算における 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
を含む比較演算の結果を示しています。
// 比較演算 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
は 0
より大きく、有限の値であることを確認できます。
実用的な例
許容誤差の設定
以下のプログラムは、浮動小数点計算における許容誤差として 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
を基準にすることで、非常に小さな値も適切に比較できます。
アンダーフロー検出
以下のプログラムは、数値計算でアンダーフローが発生したかどうかを検出する例を示しています。
// アンダーフロー検出関数 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
になったかどうかを検出する関数の例を示しています。
Number.MIN_VALUE と小さな数値
Number.MIN_VALUE
に関する誤解を避けるための重要なポイントをいくつか示します:
- 最小値ではなく最小正値:
Number.MIN_VALUE
は最小の正の値です。負の方向での最小値(最も小さい値)は-Number.MAX_VALUE
です。 - ゼロより大きい:
Number.MIN_VALUE
は小さいですが、0 よりは大きい値です。 - アンダーフロー:
Number.MIN_VALUE
よりも小さい正の値は、JavaScript では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.POSITIVE_INFINITY
: 正の無限大Number.NEGATIVE_INFINITY
: 負の無限大Number.NaN
: 数値ではない値Number.MAX_VALUE
: 表現可能な最大の正の値Number.MAX_SAFE_INTEGER
: 安全に表現できる最大の整数Number.MIN_SAFE_INTEGER
: 安全に表現できる最小の整数Number.EPSILON
: 数値の丸め誤差を表す最小値
脚註
- ↑
Number.MIN_VALUE
は JavaScript の数値表現における正の最小値であり、これより小さい正の値は0
として表現されます。