use*_*288 1 c++ algorithm precision double rounding-error
在linux x86_64上的C++代码中,我需要加倍精度计算(+或 - ).
26.100000000000001 - 26 + 0.10000000000000001
我有:
0.20000000000000143
我想得到0.2.
这里,显示格式不是导入的,计算结果将用于一些if-else分支条件.所以,我只希望if-else条件比较十进制数字后面的4位数.
这似乎是一个舍入错误?
如何将计算精度限制在小数点后的4位数?
我不想调用任何函数以避免开销.
由于转换开销,我不想使用stringstream.
有更好的想法吗?
谢谢
计算精度很好.这是你试图控制的显示精度.你可以使用setprecision()if <iostream>或者像格式化器一样"%.4f"使用<stdio.h>.
您已经在调用函数,因为您将结果显示为十进制!
PS 0.1不能精确由a表示float,double任何二进制尾数格式,或.它是因子(1/2) * (1/5),十进制1/5是二进制的无限重复数字序列.
PPS Go看看GMP.这可能是你最大的希望.