Por favor, considere el siguiente código y comentarios:La inconsistencia en el comportamiento de división por cero entre diferentes tipos de valor
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
Puedo entender el compilador comprobar activamente la división por cero constante y la DivideByZeroException en tiempo de ejecución, pero:
¿Por qué usar un doble en un retorno de división por cero Infinity en lugar de arrojar una excepción? ¿Es esto por diseño o es un error?
Sólo por diversión, lo hice en VB.NET, así, con resultados más 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
EDIT:
basado en la retroalimentación de kekekela me encontré con lo siguiente, que dio lugar a en el infinito:
Console.WriteLine(1/
.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001);
Esta prueba parece corroborar la idea y un doble literal de 0.0
es en realidad una fracción muy, muy pequeña que dará como resultado Infinito ...
Aquí está mi artículo sobre el tema: http://blogs.msdn.com/b/ericlippert/archive/2009/10/15/as-timeless-as-infinity.aspx –
@EricLippert ¡genial! – Jalal