2012-03-22 19 views
4

整数を0で割ったときにコンパイル時エラーが発生しますが、2倍の場合はコンパイルエラーはありませんが、実行時には無限大/ NaNが結果として得られます。どんなアイデアなぜ&なぜゼロで除算に来るときに異なる動作を持っていますか?Int vs Doubleとゼロ除算例外

void Main() 
{ 
    int number = 20; 
    var result1 = number/0; // Divide by zero compile time exception 

    double doubleNumber = 20; 
    var result2 = doubleNumber/0.0; // no compile time error. Result is infinity or NaN 
} 
+2

これは、2つの数値システム**の数式**が定義されているためです。** –

+0

Infinity/-Infinity/NaNに相当するintがないためです。浮動小数点演算は整数演算とは非常に異なる方法で行われます。 –

答えて

6

だから、それはdefinedです。整数の場合、無限大とNaNのための特別な値はありませんが、コンパイル時に問題が見つかる可能性がある場合、コンパイラはエラーを投げます。

1

数学的背景のために。無限大は浮動小数点数に対して定義されますが、整数に対しては定義されません。

1

理論的にはゼロで除算すると無限大になりますが、整数データ型には無限を表すものはありません。 doubleデータ型では例外が発生するので、そこに例外をスローする必要はありません。

関連する問題