0除算の結果定数
プログラミングC# 第6版
飛ばしていた例外の章について見ていきます。
double型の0で0除算をすると以下のような出力が得られます。
using System; class Program { static void Main() { double i = 0.0; Console.WriteLine(0.0/i); Console.WriteLine(1.0/i); Console.WriteLine(-1.0/i); } }
$ main NaN (非数値) +∞ -∞
なにやらNaNやら∞やら見慣れないものが表示されました。
これらはDoubleに定義されている定数ということです。それぞれ
Double.NaN Double.PositiveInfinity Double.NegativeInfinity
となっています。
またこれらを比較するための関数も存在しています。
using System; class Program { static void Main() { Check(0.0); Check(1.0); Check(-1.0); } static void Check(double d) { double i = 0.0; Console.WriteLine("{0}/{1}",d,i); Console.WriteLine("Double.IsNaN = {0}",Double.IsNaN(d/i)); Console.WriteLine("Double.IsPositiveInfinity = {0}",Double.IsPositiveInfinity(d/i)); Console.WriteLine("Double.IsNegativeInfinity = {0}",Double.IsNegativeInfinity(d/i)); Console.WriteLine("Double.IsInfinity = {0}",Double.IsInfinity(d/i)); } }
$ main 0/0 Double.IsNaN = True Double.IsPositiveInfinity = False Double.IsNegativeInfinity = False Double.IsInfinity = False 1/0 Double.IsNaN = False Double.IsPositiveInfinity = True Double.IsNegativeInfinity = False Double.IsInfinity = True -1/0 Double.IsNaN = False Double.IsPositiveInfinity = False Double.IsNegativeInfinity = True Double.IsInfinity = True
うまく比較できていますね。
ちなみにint型で0除算すると例外が発生します。
using System; class Program { static void Main() { int i = 0; int j = 0 / i; } }
$ main ハンドルされていない例外: System.DivideByZeroException: 0 で除算しようとしました。 場所 Program.Main()
doubleとintで挙動が違うので注意が必要ですね。