划分两个浮点数不会给出确切的结果

Dividing two floats doesn't give exact result

本文关键字:结果 浮点数 两个 划分      更新时间:2023-10-16

我除以 9501/100.0f 期望得到 95.01f 的结果,但由于某种偏差的原因,结果是 95.01000000002f。

我知道四舍五入误差,并且除以两个较大的浮点数可能会给出不正确的结果,但这两个数字相对较小,它们不应该给出错误的答案。

我将浮点数更改为双精度,只是为了看到相同的结果。

所以我的答案是,为什么我会看到这个错误的输出?

最终解决方法,而无需将数字复制到字符串并返回。

点数并不精确,处理它们有很多特质。

每个计算机科学家都应该知道的关于浮点运算的知识

我也喜欢布鲁斯·道森(Bruce Dawson)关于浮点值的博客文章。

点数是以二进制表示的数字,精度有限。

预期结果和实际结果之间的误差是由以下事实引起的:数字 95.01 在二进制表示中是无限周期的。

Double 只有 51 个二进制数字,因此在将数字存储在双精度之前必须进行一些舍入。单精度只有 23 位。

不可能

在没有任何误差的情况下以有限精度浮点数表示 95.01。但是,您可能信任前 6-9 个十进制数字,因此您应该使用某种有意义的格式格式化数字。

啊,很好,我们中的另一个人已经成为编程教会的人:)

浮点数不精确,精度会因机器而异。 1.0f != 1.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000