我在打大双打时遇到问题。
这是我准备的代码:
#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。
我做错了什么?如何显示一些大数字?
答案 0 :(得分:0)
在IEEE 754 64位二进制浮点中,double
的最常见实现是3.141592653589793115997963468544185161590576171875是最接近的可表示数字,它是3.1415926535897932384626433832795028841971693375105820974944的输出。在大多数情况下,转换为双精度的舍入错误会在大约16个十进制数字后出现。
DBL_MAX
必须精确地表示为double,因此从十进制字符串转换为double时不会出现舍入错误。