c++ linux x86_64中如何控制双精度计算以避免舍入误差



在linux x86_64上的c++代码中,我需要双精度计算(+或-)。

26.100000000000001 - 26 + 0.10000000000000001

我得到了:

0.20000000000000143

我想要0.2。

这里

,显示格式不导入,计算结果将用于某些if-else分支条件。因此,我只需要if-else条件比较小数点后的4位数字。

似乎是舍入错误?

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

为了避免开销,我不想调用任何函数。

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

有更好的主意吗?

谢谢

计算精度良好。这是您试图控制的显示精度。如果使用<iostream>,则可以使用setprecision();如果使用<stdio.h>,则可以使用"%.4f"之类的格式化器。

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

注:0.1不能精确地用floatdouble或任何二进制尾数格式表示。它分解成(1/2) * (1/5),而十进制1/5是一个无限重复的二进制数字序列。

P.P.S.去看看GMP。这可能是你最大的希望。

如果您只想打印它,您可以使用printf("%10.4lf")。当然,您可以将精度更改为任何您想要的值。

如果您只对小数点后四位的相等感兴趣,请将所有内容乘以10,000并使用整数算术。(您可能需要在乘以10,000后四舍五入)

最新更新