JavaScript/Number/MIN VALUE

カテゴリ:Book:JavaScript#Number/MIN%20VALUE%20

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_VALUE0 より大きい最小の正の値です。負の最小値ではないことに注意してください。
  • 比較: 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_VALUE0 より大きく、有限の値であることを確認できます。

実用的な例

許容誤差の設定

以下のプログラムは、浮動小数点計算における許容誤差として 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 オブジェクトに他の特殊な値も定義しています:

脚註

  1. Number.MIN_VALUE は JavaScript の数値表現における正の最小値であり、これより小さい正の値は 0 として表現されます。

外部リンク

カテゴリ:Book:JavaScript#Number/MIN%20VALUE%20 カテゴリ:JavaScript
カテゴリ:Book:JavaScript カテゴリ:JavaScript カテゴリ:Pages using the JsonConfig extension