🦎

[JS]Infinityの使い方

2024/08/15に公開

Infinityとは

Infinity は、通常の数値の範囲を超えた「無限大」を表す数値で、特に大きな値や割り算でのエラー結果としてよく現れます。例えば、1 / 0 のような演算は Infinity を返します。同様に-Infinity は負の無限大を示します。

console.log(1 / 0);        // 出力: Infinity
console.log(-1 / 0);       // 出力: -Infinity
console.log(10e1000);      // 出力: Infinity (10の1000乗は非常に大きな数)

反対に最小値を扱う場合は以下の通りです。

let minPrice = Infinity;
let prices = [300, 250, 400, 200];

for (let price of prices) {
    if (price < minPrice) {
        minPrice = price;
    }
}

console.log(minPrice); // 出力: 200

正常な計算結果と異常な計算結果の区別

Infinity は、計算が異常な結果を返したことを示すためにも使用されます。特に、ゼロでの除算やオーバーフローが発生した場合、Infinity が返されます。この特徴を利用して、エラー処理や異常値検出を行うことができます。

let result = 1 / 0;

if (result === Infinity) {
    console.log("異常な計算結果: Infinityが返されました。");
} else {
    console.log("正常な計算結果: " + result);
}

この例では、resultInfinity であるかをチェックし、異常な計算結果であることをユーザーに知らせる処理を行っています。

InfinityとNaNの違い

Infinity は「無限大」を表しますが、JavaScriptにはもう一つの特殊な数値である NaN(Not a Number)があります。これらはしばしば混同されますが、全く異なる意味を持ちます。

  • Infinity: 数値が非常に大きいか、ゼロで割るなどの計算結果が無限大になったことを示します。
  • NaN: 数値として解釈できない計算結果、例えば数値と文字列の足し算などで返されるものです。
console.log(1 / 0);        // 出力: Infinity
console.log("abc" / 2);    // 出力: NaN (文字列を数値に割り算しようとした)

Infinityを用いたエラーハンドリングの応用

エラーハンドリングの観点からも、Infinity は役立つツールです。例えば、異常な計算結果を検出してエラーを報告する際に、Infinity のチェックを組み込むことで、異常値を効率的に検出できます。データ分析や数値計算を行うツールで、予期しない無限大の値が計算結果に現れた場合、それを警告としてユーザーに通知することができます。

function analyze(data) {
    let sum = 0;
    for (let value of data) {
        sum += value;
        if (!isFinite(sum)) {
            throw new Error("計算結果が無限大になりました。入力データを確認してください。");
        }
    }
    return sum;
}

try {
    console.log(analyze([10, 20, 30, 1/0])); // 無限大の値を含む配列
} catch (error) {
    console.error(error.message);
}

参考文献

Discussion