首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >除以零不将DivideByZeroException抛出浮点数或double...why?

除以零不将DivideByZeroException抛出浮点数或double...why?
EN

Stack Overflow用户
提问于 2013-11-27 22:30:19
回答 1查看 1.3K关注 0票数 0

我一直在玩一些数学,我注意到,与其抛出一个DivideByZeroException浮点数和双倍值,不如分配值、无限值(Infinitity),当除以零时,为什么会这样呢?

代码语言:javascript
复制
    [TestMethod]
    public void TestFloatDivideByZero()
    {

        double myDouble = 100.0;
        var DbzDouble = 1000.0 / ((myDouble - myDouble) / myDouble);
        // Infinity

        float myFloat = 100.0f;
        var DbzFloat = 1000.0 / ((myFloat - myFloat) / myFloat);
        // Infinity

        decimal myDecimal = 100M;
        var DbzDecimal = 1000M / ((myDecimal - myDecimal) / myDecimal);
        // DivideByZeroException

        int myInt = 100;
        var DbzInt = 1000 / ((myInt - myInt) / myInt);
        // DivideByZeroException

    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-27 23:35:05

浮点处理器当然可以在除以零的情况下产生异常。它是可以通过编程控制寄存器来打开或关闭的特性。这已经有了非常丰富的巨大痛苦的历史,当你用不同的配置假设来混合和匹配库时,它的规模就很差了。极其难以处理的是,我们自己的遗留代码库有很多地方,在调用库之后,它会重置FPU。

普遍的结论是,不能处理这一问题,唯一合理的选择是取消例外情况。大多数现代运行时支持库都遵循这一规则。

CLR也不例外,它将FPU配置为不生成异常,并允许处理器生成无穷大。也包含在CLI标准和C#语言标准中。如果有必要,您将需要使用Double.IsInfinity()抛出自己的异常。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20254320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档