C - 添加两个单精度浮点正常数,无法得到无穷大的结果

时间:2016-05-25 13:48:25

标签: c floating-point ieee-754 single-precision

我正在玩浮点运算,我遇到了需要解释的东西。

将舍入模式设置为“朝零”时,又称:

[ViewContext]
public ViewContext ViewContext { get; set; }

private HttpRequest Request => ViewContext.HttpContext.Request;

添加不同类型的正常正数,我永远无法达到无限。

然而,从ieee 745可以知道,添加有限数字会导致溢出到无穷大。

例如:

fesetround(FE_TOWARDZERO);

但是,如果我将舍入模式更改为其他模式,我可能会得到+ INF作为答案。

  

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:6)

观察到的行为的解释是它受IEEE 754-2008浮点标准的强制要求:

  

7.4溢出

     

当且仅当目标格式的最大有限数量超过目标格式的最大有限数时,溢出异常才会发出信号,而圆形浮点结果(见4)的指数范围是无界限的。默认结果应由rounding-direction属性和中间结果的符号确定,如下所示:

     

[...]

     

b)roundTowardZero将所有溢出都带到格式最大的有限值   数字与中间结果的符号。

因此,对于此处使用的舍入模式(截断或向零舍入),溢出时的结果是最大的有限数,无穷大。