2

divide我用 C#写了一个简单的函数:

    private string divide(int a, int b)
    {
        return string.Format("Result: {0}", a / b);
    }

MessageBox.Show(divide(3, 0))如您所料,调用结果为DivideByZeroException.

所以我决定将类型转换a为浮点数(以获得非整数返回值),如下所示:

    private string divide(int a, int b)
    {
        return string.Format("Result: {0}", (float)a / b);
    }

奇怪的是,这现在向我显示Result: Infinity

尽管我可能弄错了,但这对我来说似乎是一个错误。是因为结果现在是一个浮点数,它本质上被视为返回值3 / 1 x 10^-99999或类似的东西吗?

我对这个结果感到非常震惊。

4

3 回答 3

3

这是您转换intfloat. 这取自MSDN文档:

根据 IEEE 754 算术规则,将浮点值除以零将导致正无穷大、负无穷大或非数 (NaN)。浮点运算从不抛出异常。有关详细信息,请参阅SingleDouble

于 2011-10-17T13:26:35.827 回答
2

来自MSDN算术溢出部分:

浮点算术溢出或除以零永远不会引发异常,因为浮点类型基于 IEEE 754,因此具有表示无穷大和 NaN(非数字)的规定。

于 2011-10-17T13:22:34.500 回答
1

不,对于正确的浮动操作。

几乎所有现代浮点单元都支持的 IEEE 浮点标准指定每个浮点算术运算,包括除以零,都具有明确定义的结果。该标准支持有符号零,以及无穷大和 NaN(不是数字)。有两个零,+0(正零)和-0(负零),这消除了除法时的任何歧义。在 IEEE 754 算术中,当 a 为正时,a ÷ +0 为正无穷,当 a 为负时为负无穷,当 a = ±0 时为 NaN。当除以 -0 时,无穷大符号会发生变化。

参考

于 2011-10-17T13:22:31.617 回答