请考虑以下代码和评论:
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
Run Code Online (Sandbox Code Playgroud)
我可以理解编译器在运行时主动检查除零常量和DivideByZeroException但是:
为什么在"除零"中使用双精度返回Infinity而不是抛出异常?这是设计还是错误?
只是为了踢,我也在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 …Run Code Online (Sandbox Code Playgroud)