根据设计,为什么C#编译器允许将任何float或double值除以零?

时间:2010-07-28 10:01:31

标签: c# compiler-construction

根据设计,为什么C#编译器允许任何浮点值或双精度值除以零?

class Program
{
    static void Main(string[] args)
    {
        double x = 0.0 / 0;

        float y = 1f / 0;


    }
}

3 个答案:

答案 0 :(得分:10)

因为IEEE 754浮点值具有特殊的非数字值来处理这个问题:

PS Home:\> 1.0/0
Infinity
PS Home:\> 0.0/0
NaN

将整数除以零总是异常(在C#意义上 1 ),所以你可以直接抛出异常。


1 将浮点数除以零也是一个例外,但是处于完全不同的水平,许多编程语言将其抽象出来。

答案 1 :(得分:1)

因为浮点值具有无穷大的有效(且真正有用)表示,而任何类型的整数都没有。

答案 2 :(得分:0)

编译器允许你将float或double除以零的原因是float和double在正无穷大和负无穷大(和“不是数字”)的概念上有表示,所以这是一个有意义的事情允许。

一个奇怪的是编译器失败了

 decimal d = 2; 
 decimal d2 = d/0M

除以零,即使它在编写整数的等效代码时也会发现它。