使用 10 除法会产生错误的精度

Dividing using 10 gives wrong precision

本文关键字:错误 精度 除法 使用      更新时间:2023-10-16

我的目的是舍入一个值,但它给出了错误的输出

      float travellingEmptyDist = 2.05; 
travellingEmptyDist = round(travellingEmptyDist * 10); // gives value 21.0
travellingEmptyDist = travellingEmptyDist/ 10.0; // gives wrong value 2.09999, expecting 2.1

有没有办法纠正它

我建议观看此视频计算机爱好者:浮点数

它将为您提供一个非常简单的概述,说明为什么浮点本质上是不精确的,而无需涉及太多的技术细节。我也有偏见,因为我喜欢数字爱好者。

你需要问问自己,你真的需要额外的0.00001精度吗?如果您确实需要更高的精度,请使用双精度而不是浮点数,但即便如此,您仍然会有舍入误差。

如果您需要更高的精度,则必须使用第三方精度算术库。我从来没有需要过,但根据谷歌的结果,GMP似乎很受欢迎。