在C中显示大双打

时间:2018-11-24 17:27:52

标签: c printing double

我在打大双打时遇到问题。

这是我准备的代码:

#include <stdio.h>
#include <float.h>
#define M_PI 3.141592653589793238462643383279502884197169399375105820974944
int main()
{
    printf("%.70f\n",M_PI);
    return 0;
}

它显示:

3.1415926535897931159979634685441851615905761718750000000000000000000000

但是一旦我将M_PI更改为DBL_MAX,一切都将正确显示。 更糟糕的是,当删除M_PI定义中的点(留下一个很大的数字)时,结果为0。

我做错了什么?如何显示一些大数字?

1 个答案:

答案 0 :(得分:0)

在IEEE 754 64位二进制浮点中,double的最常见实现是3.141592653589793115997963468544185161590576171875是最接近的可表示数字,它是3.1415926535897932384626433832795028841971693375105820974944的输出。在大多数情况下,转换为双精度的舍入错误会在大约16个十进制数字后出现。

根据其定义,

DBL_MAX必须精确地表示为double,因此从十进制字符串转换为double时不会出现舍入错误。