Пожалуйста, обратите внимание на следующий код и комментарии:
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
Я могу понять, что компилятор активно проверяет деление на нулевую константу и DivideByZeroException во время выполнения, но:
Почему использование двойного числа в делении на ноль возвращает бесконечность, а не генерирует исключение? Это по замыслу или это ошибка?
Просто ради удовольствия, я сделал это и в VB.NET, с "более последовательными" результатами:
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:
Основываясь на отзывах Кекекелы, я запустил следующее, что привело к бесконечности:
Console.WriteLine(1 / .0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001);
Этот тест, кажется, подтверждает идею, и буквальное двойное число 0.0
на самом деле очень, очень крошечная дробь, которая приведет к бесконечности ...