Inconsistência no comportamento de divisão por zero entre diferentes tipos de valor
Por favor, considere o seguinte código e comentários:
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
Eu posso entender o compilador que verifica ativamente a divisão pela constante zero e a DivideByZeroException em tempo de execução, mas:
Por que usar um duplo em uma divisão por zero retornaria o Infinito em vez de lançar uma exceção? Isso é intencional ou é um bug?
Apenas para brincadeiras, fiz isso no VB.NET também, com resultados "mais consistentes":
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:
Com base no feedback de kekekela, executei o seguinte que resultou no infinito:
Console.WriteLine(1 / .0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001);
Esse teste parece corroborar a idéia e um duplo literal de0.0
é na verdade uma fração muito, muito pequena, que resultará em Infinito ...