浮動小数点数型での演算では、ゼロによる除算やゼロ同士の除算、Mathクラスでの演算などにより、結果が無限大や非数になる場合があります。 また、場合によっては値として無限大や非数を代入する必要が生じることもあります。
Half/Single/Doubleには、これらの特殊な値を表す定数が以下の静的フィールドとして用意されています。
- PositiveInfinityフィールド
- 正の無限大を表す定数。 正の数をゼロで除算した場合や、演算結果がMaxValueより大きくなる場合にこの値となります。
- NegativeInfinityフィールド
- 負の無限大を表す定数。 負の数をゼロで除算した場合や、演算結果がMinValueより小さくなる場合にこの値となります。
- NaNフィールド
- 非数を表す定数。 ゼロ同士の除算や、非数との演算など、演算の結果が未定義となる場合にこの値となります。
PositiveInfinity/NegativeInfinity/NaNフィールドを参照して正負の無限大・非数を取得する
Imports System
Class Sample
Shared Sub Main()
Const zero As Double = 0.0
Const plus As Double = +1.0
Const minus As Double = -1.0
' ゼロによる除算・定数フィールドから無限大を得る
Console.WriteLine("{0} {1}", plus / zero, double.PositiveInfinity)
Console.WriteLine("{0} {1}", minus / zero, double.NegativeInfinity)
' ゼロ同士の除算・定数フィールドから非数を得る
Console.WriteLine("{0} {1}", zero / zero, double.NaN)
End Sub
End Class
実行結果
+∞ +∞ -∞ -∞ NaN (非数値) NaN (非数値)
.NETでは例外DivideByZeroExceptionが定義されていますが、上記の例にもあるように、Single/Doubleでのゼロ除算では例外はスローされません。 一方、Decimalでゼロ除算となる場合はDivideByZeroExceptionがスローされます。