IEEE 754舍入或斩波

时间:2014-10-15 12:54:30

标签: c floating-point ieee-754

谁和在什么阶段决定使用斩或舍入数字?例如,如果我编写一个C程序并且其中有一个double变量,那么数字2.57会发生什么(无论其浮点表示如何)?是剁到2.5还是四舍五入到2.6?我的C编译器是否决定这两种可能性? IEEE 754标准是否说明我的C编译器应该做什么?它是在我的CPU架构中实现的,还是在我的操作系统中实现的?

2 个答案:

答案 0 :(得分:3)

它是实现定义的。具体而言,虽然常用,但C标准并未强制执行IEEE-754支持。

  

C11§6.4.4.2浮动常数 section3

     

有效数部分被解释为(十进制或十六进制)有理数;指数部分中的数字序列被解释为十进制整数。对于十进制浮点常数,指数表示有效位部分要缩放的10的幂。对于十六进制浮点常量,指数表示有效位部分要缩放的2的幂。对于十进制浮点常量,以及当FLT_RADIX不是2的幂时的十六进制浮点常量,结果是最接近的可表示值,或者与最近的可表示值紧邻的较大或较小的可表示值,以实现定义的方式选择。对于十六进制浮点常量,当FLT_RADIX是2的幂时,结果将被正确舍入。

答案 1 :(得分:2)

正如@YuHao C标准所指出的那样,标准不强制IEEE-754一致,但是有预定义的宏来检查它。参考N1570§6.10.8.3/ p1,条件特征宏

  

__STDC_IEC_559__整数常数1,用于表示符合附录F(IEC 60559浮点数)中的规范   算术)。

     

__STDC_IEC_559_COMPLEX__整数常数1,用于表示符合附录G(IEC 60559中的规范)   兼容的复杂算术)

您可以发现它与IEEE-754实际上是相同的标准。

这些宏也(在条件上)在C99中定义(N1256§6.10.8/ p2)。