3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JavaScript の 0 除算は少し複雑

Last updated at Posted at 2025-09-10

1. 0 除算

JavaScript で 0 除算を行う場合、完全な 0 でなく限りなく 0 に近い値で割ったような扱いになります。

console.log(1 / 0);
console.log(1 / -0);
実行結果
Infinity
-Infinity

参考「除算演算子 (/) - JavaScript | MDN

2. 0 に近い値による除算

0-0 以外の値でも、割り算の結果が無限大になることがあります。

例えば、1 / Number.MIN_VALUE > Number.MAX_VALUE かつ 1 / Number.MIN_VALUE > Number.MAX_SAFE_INTEGER になります:

  • Number.MAX_VALUE: $2^{1024} - 2^{971} = (2^{53} - 1) 2^{971}$
  • Number.MAX_SAFE_INTEGER: $2^{53} - 1$
  • Number.MIN_VALUE: $2^{-1074} \simeq 5 \times 10^{-324}$
    • 1 / Number.MIN_VALUE: $2^{1074} \simeq 2 \times 10^{323}$
console.log(1 / Number.MIN_VALUE);
実行結果
Infinity

参考「Number.MAX_VALUE - JavaScript | MDN
参考「Number.MAX_SAFE_INTEGER - JavaScript | MDN
参考「Number.MIN_VALUE - JavaScript | MDN

3. 除算結果が無限大にならないようにする

3.1. Number.EPSILON を用いる場合

1 / Number.EPSILON < Number.MAX_VALUE かつ 1 / Number.EPSILON < Number.MAX_SAFE_INTEGER を利用して、除算結果が無限大にならないようにすることが可能です:

  • Number.MAX_VALUE: $2^{1024} - 2^{971} = (2^{53} - 1) 2^{971}$
  • Number.MAX_SAFE_INTEGER: $2^{53} - 1$
  • Number.EPSILON: $2^{-52}$
    • 1 / Number.EPSILON: $2^{52}$
console.log(1 / Number.EPSILON);
console.log(100 / (100 * Number.EPSILON));
実行結果
4503599627370496
4503599627370496
const f = (x, y) => console.log(x / y, y < x * Number.EPSILON);

f(1, 0);
f(1, -0);
f(1, Number.MIN_VALUE);
f(1, Number.EPSILON);
f(100, 100 * Number.EPSILON);
実行結果
Infinity true
-Infinity true
Infinity true
4503599627370496 false
4503599627370496 false

参考「Number.MAX_VALUE - JavaScript | MDN
参考「Number.MAX_SAFE_INTEGER - JavaScript | MDN
参考「Number.EPSILON - JavaScript | MDN

3.2. Number.isFinite() を用いる場合

Number.isFinite() を利用して除算結果が無限大でないことを直接確認することも可能です。

const f = x => console.log(x, Number.isFinite(x));

f(1 / 0);
f(1 / -0);
f(1 / Number.MIN_VALUE);
f(1 / Number.EPSILON);
f(100 / (100 * Number.EPSILON));
実行結果
Infinity false
-Infinity false
Infinity false
4503599627370496 true
4503599627370496 true

参考「isFinite() - JavaScript | MDN

4. 長整数 bigint 型の場合

長整数 bigint 型は 0 除算をしようとすると RangeError が発生します。

整数のため、単に 0n と比較することで 0 除算を防ぐことが可能です。

// console.log(100n / 0n);

console.log(0n === 0n);
実行結果
true

参考「除算演算子 (/) - JavaScript | MDN
参考「BigInt - JavaScript | MDN

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?