我在C#中写了一个简单的divide
函数:
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);
}
奇怪的是,这现在向我显示结果:无限。
这对我来说似乎是个错误,虽然我可能会弄错。是因为结果现在是一个浮点数,它被视为3 / 1 x 10^-99999
或类似的返回值?
我对这个结果感到非常惊讶。
答案 0 :(得分:3)
这是将int
转换为float
时的行为。这取自MSDN文档:
将浮点值除以零将导致为正 根据无穷大,负无穷大或非数字(NaN) IEEE 754算法规则。浮点运算永远不会抛出 例外。有关详情,请参阅Single和Double。
答案 1 :(得分:2)
来自算术溢出部分下的MSDN:
浮点算术溢出或除零从不抛出 异常,因为浮点类型基于IEEE 754等 有代表无限和NaN(非数字)的规定。
答案 2 :(得分:1)
不,对于正确的浮动操作。
几乎所有现代浮点单元都支持的IEEE浮点标准规定每个浮点算术运算(包括除以零)都有明确定义的结果。该标准支持有符号零,以及无穷大和NaN(不是数字)。有两个零,+ 0(正零)和-0(负零),这消除了分割时的任何歧义。在IEEE 754算术中,当a为正时,÷+ 0为正无穷大,当a为负时,÷+ 0为负无穷大,当a =±0时,为NaN。除以-0时,无穷大符号会发生变化。