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

问题描述 投票:0回答:3

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

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

        float y = 1f / 0;


    }
}
c#
3个回答
10
投票

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

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

而整数除以零始终是异常(在 C# 意义上1),因此您可以直接抛出异常。


1 将浮点数除以零也是一个例外,但处于完全不同的级别,并且许多编程语言将其抽象化。


1
投票

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


0
投票

编译器允许您将 float 或 double 除以零的原因是 float 和 double 具有正无穷大和负无穷大(以及“不是数字”)概念的表示,因此允许它是有意义的事情.

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

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

作为除以零,尽管如果您为整数编写等效代码,它确实会发现它。

© www.soinside.com 2019 - 2024. All rights reserved.