在linux x86_64上的C ++代码中,我需要加倍精度计算(+或 - )。
26.100000000000001 - 26 + 0.10000000000000001
我得到了:
0.20000000000000143
我想得到0.2。
这里,显示格式不导入,计算结果将用于一些if-else分支条件。所以,我只希望if-else条件比较十进制数字后的4位数。
这似乎是一个舍入错误?
如何将计算精度限制在小数点后的4位数?
我不想调用任何函数以避免开销。
由于转换开销,我不想使用stringstream。
有更好的想法吗?
感谢
答案 0 :(得分:8)
计算精度很好。这是你试图控制的显示精度。如果使用setprecision()
,则可以使用<iostream>
;如果使用"%.4f"
,则可以使用<stdio.h>
之类的格式化工具。
您已经在调用函数,因为您将结果显示为十进制!
P.S。 0.1
,float
或任何二元尾数格式无法准确表示double
。它将因子分解为(1/2) * (1/5)
,而十进制1/5
是一个无限重复的二进制数字序列。
P.P.S。去看看GMP。这可能是你最大的希望。
答案 1 :(得分:2)
如果您只想打印它,可以使用printf(“%10.4lf”)。当然,您可以将精度更改为您想要的任何内容。
答案 2 :(得分:1)
如果您只对最多四位小数的相等感兴趣,请将所有内容乘以10,000并使用整数运算。 (您可能需要在乘以10,000后进行舍入。)