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

时间:2013-12-18 20:47:36

标签: c++ double precision

我将9501 / 100.0f分为期望获得95.01f的结果,但由于某些不正常的原因,结果为95.01000000002f。

我知道舍入错误,并且划分两个较大的浮点数会产生不正确的结果,但这两个数字相对较小,并且不应该给出错误答案。

我已将浮动更改为双打,但只能看到相同的结果。

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

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

3 个答案:

答案 0 :(得分:6)

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

What Every Computer Scientist Should Know About Floating-Point Arithmetic

我也很喜欢布鲁斯道森关于浮点值的blog entries

答案 1 :(得分:1)

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

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

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

无法在有限精度浮点数中表示95.01而没有任何错误。 但是,您可以信任前6-9个十进制数字,因此您应该使用一些有意义的格式来格式化数字。

答案 2 :(得分:0)

好吧,我们中的另一个人已成为编程教会中的男人:)

浮点不精确,精度因机器而异。 1.0f!= 1.00000000000000000000000000000000000等等,它更像是1.0000001002003400011等等(我这里只选了任意数字)。