2016-12-01 3 views
0

Als eine Folge von my previous question bemerkte ich seltsames Verhalten (mit der Konsole) beim Dividieren durch Null. Ich fand, dass die beiden folgenden Anweisungen kompilieren fein:Warum geben Dezimalstellen einen Fehler bei der Kompilierung bei der Division durch Null?

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

Während diese beiden eine Kompilierung Fehler geben:

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

Von

Division by constant zero

Warum gibt es diesen Unterschied im Verhalten?

+0

@JeroenVannevel Meine Frage ist über Kompilierzeit Fehler, aber ich nehme an, der Grund ist der gleiche wie der Laufzeitfehler, danke – TheLethalCoder

+0

Diese Fragen sind korreliert, aber es ist kein echtes Duplikat: Schwerpunkt auf Kompilierzeit Fehler. Der andere war "warum doppelte Division durch 0" – Guillaume

+0

@Guillaume Obwohl das Duplikat die Frage beantwortet und Kompilieren und Laufzeitfehler/Ausnahmen in I umfasst, so glaube ich, dass es immer noch ein Betrüger – TheLethalCoder

Antwort

0

Division durch 0 ist für Float- und Double-Typen zulässig. Es gibt unendlich zurück.

Für Int32 und Dezimal ist es nicht erlaubt, es löst eine Ausnahme aus. Der Compiler erlaubt keine Division durch 0 auf konstanten Werten, da dies zu undefiniertem Verhalten führt.

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

... 

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

Der Compiler ist nicht in der Lage, einen korrekten Wert für Ihren konstanten Ausdruck zu berechnen. Beachten Sie, dass der Wert zur Laufzeit kompiliert und nicht ausgewertet wird. Daher ist es nicht möglich, eine Ausnahme auszulösen.

+0

Welches ist genau das, was ich in meiner Frage angegeben habe, ist die Frage, warum – TheLethalCoder

+0

Es ist von Entwurf. Die Art, wie verschiedene numerische Typen implementiert werden ... verschiedene Typen, verschiedene Funktionen. Warum der Downvote? – Guillaume

+0

Ich habe einige Details hinzugefügt, warum es nicht möglich ist, eine konstante (Kompilierzeit) Division durch 0 zu bewerten. – Guillaume

Verwandte Themen