在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
不能精确地用float
、double
或任何二进制尾数格式表示。它分解成(1/2) * (1/5)
,而十进制1/5
是一个无限重复的二进制数字序列。
P.P.S.去看看GMP。这可能是你最大的希望。
如果您只想打印它,您可以使用printf("%10.4lf")。当然,您可以将精度更改为任何您想要的值。
如果您只对小数点后四位的相等感兴趣,请将所有内容乘以10,000并使用整数算术。(您可能需要在乘以10,000后四舍五入)