c++ - 为什么最后一个十进制数字为 5 的 float 在浮点比较中给出正确的输出,而在其他情况下却不是?

标签 c++ c floating-point precision

<分区>

我已经问过这个问题,但是我不清楚这个特定子部分的答案。请看下面的代码:

float f=2.5;
if (f==2.5)
printf("abc");
else
printf("xyz"); //prints abc

我知道如果我们采用 2.2 而不是 2.5,它会输出相反的结果,因为 float 被视为 double 和 float 。他们实际上不应该等同吗?我想知道为什么最后一个小数位 5 的数字会出现异常。

最佳答案

2.5 可以写成一个二元有理数,并且考虑到它的量级也足够小,它可以精确地表示为IEEE754 float 。例如,2.25 也可以完美表示。引用:https://en.wikipedia.org/wiki/Dyadic_rational


floating point nos. shouldnt be equated actually

这只不过是一条经验法则。使用未经深思熟虑的公差进行任意比较可能是有害的。 float 没有什么神秘的。只是大部分不能用小数来表示(这是开发人员倾向于考虑的),仅此而已。

关于c++ - 为什么最后一个十进制数字为 5 的 float 在浮点比较中给出正确的输出,而在其他情况下却不是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42085272/

相关文章:

java - 使用 Java 迭代所有浮点值

c - MPIR 的浮点类型不准确吗?

c++ - 二进制搜索到达文件中间的方法

c - 如何在rom中编程?

c - pthread_create int 而不是 void

C - 在这个简单的程序中出现段错误(核心转储)错误

C++ 浮点加法(从头开始): Negative results cannot be computed

c++ - 一个带有引用和静态类成员的奇怪案例

c++ - QT showstatus 提示仅在鼠标离开窗口并返回后显示

C++ 小字符转十六进制函数?