c++ - C++ double 只有 3 位数吗?

标签 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);

最佳答案

没有。 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/

相关文章:

c++ - 智能指针 - 如果构造函数抛出怎么办?

c++ - 使用.natvis 文件在visual studio 2015 中自定义多维数组调试

c - 将浮点值打印到控制台精度问题_

java - Java 和 SQL Server 中的精度噩梦

matlab - 为什么 MATLAB surf 函数不能处理单精度数据?

c++ - Visual Studio 2012 C++ 控制台应用程序立即退出

c++ - 编程工作的伪代码帮助

c++ - 如何在 MPI + openmp 中启动多线程?

oracle - 在 Oracle 中创建 View 时更改列精度

python - 在 Python 中,time.time() * 1000 是否足够精确?