C:如何进行精确的浮点运算?

C: How to perform accurate floating-point operations?

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

我的解决方案是:

这适用于 0.49999999999999994 和 0.30000000000000004。

如何实现这样的舍入函数?还有别的办法吗?

问题从小数分数0.1和0.2转换为双重的时刻存在,获取0.10000000000000000000055551151515123125782115115834045454541541015625和0.2000000000000000000000000000000000000000000000000232325555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555太Y1。两者都比小数部分大一点。最接近它们总和的两倍,0.3000000000000000444089209850062616169452667236328125,是 0.3 的下一个两倍。最接近 0.3 的 double 更小,0.299999999999999988897769753748434595763683319091796875

如果您需要精确的小数运算,而不仅仅是非常非常接近,则需要使用小数运算类型,而不是双精度。