C:如何执行准确的浮点运算?

时间:2016-07-19 17:44:08

标签: c floating-point floating-accuracy

由于精度错误,我很清楚0.1+0.2 != 0.3。但是我需要它等于0.3。

我的解决方案是:

  • 声明add函数,返回正确的double
  • 在此功能中,添加两个数字然后四舍五入到第13位。

这适用于0.49999999999999994和0.30000000000000004。

我如何实现这样的舍入函数?还有另一种方式吗?

1 个答案:

答案 0 :(得分:2)

从小数分数0.1和0.2转换为double的那一刻起存在问题,得到0.1000000000000000055511151231257827021181583404541015625和0.200000000000000011102230246251565404236316680908203125。两者都小于小数。最接近它们的两倍,即0.3000000000000000444089209850062616169452667236328125,是0.3的下一个翻倍。最接近0.3的双倍小,0.299999999999999988897769753748434595763683319091796875

如果你需要精确的十进制算术,不仅非常非常接近,你需要使用十进制算术类型,而不是双倍。