Inconsistencia en el comportamiento de dividir por cero entre diferentes tipos de valores

Considere el siguiente código y comentarios:

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 que el compilador verifica activamente la división por constante cero y la DivideByZeroException en tiempo de ejecución, pero:

¿Por qué usar un doble en una división por cero devuelve Infinito en lugar de lanzar una excepción? ¿Es esto por diseño o es un error?

Solo por diversión, hice esto también en VB.NET, 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

EDITAR:

Basado en los comentarios de kekekela, ejecuté lo siguiente que resultó en infinito:

Console.WriteLine(1 / .0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001);

Esta prueba parece corroborar la idea y un doble literal de0.0 es en realidad una fracción muy, muy pequeña que resultará en Infinito ...

Respuestas a la pregunta(5)

Su respuesta a la pregunta