我写了一个小程序,跑在wintel上。如果 x 是 double,我得到 3,如果 x 被定义为 long double,我得到 4。这是否意味着这些类型只能精确到 3 位或 4 位小数?
谢谢
double x = 1;
long double f = 0.1;
while (x+f-f == x) f /= 10;
int precision = 1-log10(f);
最佳答案
没有。 double
通常是 IEEE 754 double-precision floating point number ,这意味着它有一个 52 位的小数字段。包括隐含的前导 1 给出 53 个有效位,或大约 16 个十进制数字:
log10(253) ≈ 15.955
假设您使用的是 Intel 平台,long double
通常是 80-bit floating point number具有 64 位有效数字。这给出了大约 19 位十进制数字的精度:
log10(264) ≈ 19.266
关于c++ - C++ double 只有 3 位数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19690269/