c++ - 如何控制 double 计算以避免 C++ linux x86_64 中的舍入错误?

标签 c++ algorithm double precision rounding-error

在 linux x86_64 上的 C++ 代码中,我需要 double 计算(+ 或 -)。

26.100000000000001 - 26 + 0.10000000000000001

我得到了:

0.20000000000000143

我想得到 0.2。

此处不导入显示格式,计算结果将用于一些if-else分支条件。所以,我只希望 if-else 条件比较小数点后的 4 位数字。

这似乎是一个舍入错误?

如何限制计算精度为小数点后4位?

我不想调用任何函数以避免开销。

由于转换开销,我不想使用 stringstream。

有什么更好的主意吗?

谢谢

最佳答案

计算精度很好。这是您要控制的显示精度。你可以用 setprecision() 做到这一点如果使用 <iostream>或类似 "%.4f" 的格式化程序如果使用 <stdio.h> .

您已经在调用函数,因为您将结果显示为十进制!

附言0.1不能用 float 精确表示, double , 或任何二进制尾数格式。它会影响 (1/2) * (1/5) , 和十进制 1/5是无限重复的二进制数字序列。

附言去看看GMP .这可能是您最大的希望。

关于c++ - 如何控制 double 计算以避免 C++ linux x86_64 中的舍入错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8630957/

相关文章:

c++ - double to std::cout 截断数据

c++ - 为什么有两个不同的输出?

c++ - 打印对象的文本表示

c++ - 昂贵的移动类型

algorithm - 如何在订单行上按比例分配折扣?

algorithm - 生成具有 k 个的二进制字符串序列,其中下一个字符串有两位不同

java - Java中的Columnar Transposition解密算法

data-structures - 我应该使用 double 据结构来存储非常大的整数值吗?

c++ - 找到下一个回文

c - 为什么在 c 中 sizeof(0.7)=8 字节?