JavaScriptにおける誤差と数値操作
- Number.EPSILON を使うことで浮動小数点誤差を考慮した計算が可能。
- Number.MIN_SAFE_INTEGER と Number.MAX_SAFE_INTEGER を理解することで、安全な整数の範囲を確認可能。
- Number.isSafeInteger(value) で値が安全な整数かどうかを簡単に確認できる。
Number.EPSILON
Number.EPSILON
は、JavaScriptにおける浮動小数点計算の精度を表す非常に小さい定数です。この値は、1と1より大きい次の数値との差を表します。
JavaScriptでの浮動小数点計算は、IEEE 754標準に基づいていますが、
この仕組み上、わずかな計算誤差が発生することがあります。Number.EPSILON
を使うことで、計算の誤差を確認したり回避したりすることが可能です。
例
const a = 0.1 + 0.2; // 実際には0.30000000000000004になる console.log(a === 0.3); // false const isCloseEnough = Math.abs((0.1 + 0.2) - 0.3) < Number.EPSILON; console.log(isCloseEnough); // true
Number.MIN_SAFE_INTEGER
Number.MIN_SAFE_INTEGER
は、JavaScriptで安全に扱える最小の整数値を表します。この値は -9007199254740991 (-253 + 1) です。
JavaScriptの数値はすべて倍精度浮動小数点数として扱われるため、-9007199254740991より小さい整数では正確な計算が保証されません。
例
console.log(Number.MIN_SAFE_INTEGER); // -9007199254740991 const x = Number.MIN_SAFE_INTEGER - 1; console.log(x === Number.MIN_SAFE_INTEGER - 2); // true (正確な計算ができない)
Number.MAX_SAFE_INTEGER
Number.MAX_SAFE_INTEGER
は、JavaScriptで安全に扱える最大の整数値を表します。この値は 9007199254740991 (253 - 1) です。
これを超える整数では正確な計算が保証されません。
例
console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991 const y = Number.MAX_SAFE_INTEGER + 1; console.log(y === Number.MAX_SAFE_INTEGER + 2); // true (正確な計算ができない)
Number.isSafeInteger(value)
Number.isSafeInteger(value)
は、与えられた値が安全な整数(Number.MIN_SAFE_INTEGER
から Number.MAX_SAFE_INTEGER
の範囲内)かどうかを判定する関数です。
安全な整数とは、IEEE 754標準の制約内で正確に表現できる整数値を指します。
例
console.log(Number.isSafeInteger(123)); // true console.log(Number.isSafeInteger(9007199254740991)); // true console.log(Number.isSafeInteger(9007199254740992)); // false console.log(Number.isSafeInteger(0.1)); // false console.log(Number.isSafeInteger("123")); // false
まとめ
JavaScriptでは、浮動小数点計算の精度や整数の扱いにおいて注意が必要です。 数値計算に関連するこれらのツールを適切に使いこなすことで、より信頼性の高いプログラムを作成できます。