C++双精度只有3位数吗?

R C*_*ris 0 c++ precision

我写了一个小程序并在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);
Run Code Online (Sandbox Code Playgroud)

Car*_*rum 6

A号double通常是IEEE 754双精度浮点数,意味着它具有52位分数字段.包括隐式前导1给出53个有效位,或大约16个十进制数字:

      log 10(2 53)≈15.955

假设您使用的是英特尔平台,long double通常是带有64位有效数字80位浮点数.这给出了大约19个十进制数字的精度:

      log 10(2 64)≈19.266

  • 数字工程师?好委婉.:) [答案+1] (2认同)