Veuillez considérer le code et les commentaires suivants :
Console.WriteLine(1 / 0); // will not compile, error: Division by constant zero
int i = 0;
Console.WriteLine(1 / i); // compiles, runs, throws: DivideByZeroException
double d = 0;
Console.WriteLine(1 / d); // compiles, runs, results in: Infinity
Je peux comprendre que le compilateur vérifie activement la constante de division par zéro et l'exception DivideByZeroException au moment de l'exécution, mais.. :
Pourquoi l'utilisation d'un double dans une division par zéro renvoie-t-elle Infinity plutôt que de lever une exception ? S'agit-il d'une erreur de conception ou d'un bogue ?
Juste pour le plaisir, j'ai fait la même chose en VB.NET, avec des résultats "plus cohérents" :
dim d as double = 0.0
Console.WriteLine(1 / d) ' compiles, runs, results in: Infinity
dim i as Integer = 0
Console.WriteLine(1 / i) ' compiles, runs, results in: Infinity
Console.WriteLine(1 / 0) ' compiles, runs, results in: Infinity
EDITAR:
En me basant sur les commentaires de kekekela, j'ai effectué le test suivant qui a donné un résultat infini :
Console.WriteLine(1 / .0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001);
Ce test semble corroborer l'idée et un double littéral de 0.0
est en fait une très, très infime fraction qui aboutira à l'infini...
4 votes
Voici mon article sur le sujet : blogs.msdn.com/b/ericlippert/archive/2009/10/15/