使用大文字

时间:2016-08-08 13:45:46

标签: c floating-point

#include <stdio.h>

int main(void) {
    double x = 0.12345678901234567890123456789;
    printf("%0.16f\n", x);
    return 0;
};

在上面的代码中,我用文字初始化x,文字太大而无法用IEEE 754双精度表示。在我的PC上使用gcc 4.9.2它运行良好。文字四舍五入到最接近double的值。我想知道在这种情况下幕后(在编译器级别)会发生什么?这种行为取决于平台吗?这是合法的吗?

1 个答案:

答案 0 :(得分:6)

当你写double x = 0.1;时,你写的十进制数将四舍五入到最接近的double。那么当你写0.12345678901234567890123456789时发生的事情并没有根本不同。

行为本质上是实现定义的,但大多数编译器将使用最近的可表示double来代替常量。 C标准specifies必须是紧邻上方的double或紧接下方的free