2016-12-01 13 views
0

my previous questionからのフォローアップとして、ゼロで割ったときに奇妙な動作(コンソールで)に気づいた。小数点以下の桁数が0のコンパイル時にエラーが発生するのはなぜですか?

Division by constant zero

Console.WriteLine(1/0); 
Console.WriteLine(1m/0m); 

がなぜそこにこの動作の違いである。これらの二つの一方

Console.WriteLine(1d/0d); 
Console.WriteLine(1f/0f); 

は、コンパイル時にエラーを与える:私は、次の2つのステートメントは罰金コンパイルことがわかりましたか?

+0

@ JeroenVannevel私の質問はコンパイル時エラーですが、その理由は実行時エラーと同じであると思います。 – TheLethalCoder

+0

この質問は相関関係がありますが、重複はありません。もう1つは "なぜ0で除算を許可するのですか?" – Guillaume

+0

@Guillaume複写は質問に答え、私はコンパイルして実行時間エラーや例外をカバーしているので、それはまだ偽装だと思う。 – TheLethalCoder

答えて

0

float型とdouble型は0で除算できます。無限を返します。

Int32およびDecimalの場合は許可されず、例外が発生します。 コンパイラは、未定義の動作につながるため、定数の値を0で除算することはできません。

public class MyConsts { 
public const int i = 1/0; // Constant, compile time evaluation 
} 

... 

Console.WriteLine(MyConsts.i); // What would you expect ? 

コンパイラは定数式の適切な値を計算できません。値はコンパイルされ、実行時に評価されないので、例外を発生させることはできません。

+0

これはまさに私の質問に記載されている、質問はなぜですか – TheLethalCoder

+0

これは仕様です。異なる数値型が実装される方法...異なる型、異なる機能。 なぜdownvoteですか? – Guillaume

+0

定数(コンパイル時)の除算を0で評価できない理由についていくつかの詳細を追加しました。 – Guillaume

関連する問題