为什么这个循环在第八次的时候显示x和y不等,其余时候都相等?

源代码:
#include
int main()
{
double x = 23.001, y = 24.001, z = 1.0;
for (int i = 0; i<10; i++)
{

    if ((y - x) == z)
        printf("equal\n");
    else
        printf("not equal\n");
    x += z;
    y += z;
    printf("%d,%f,%f\n", i, x, y);
}
return 0;

}图片说明

浮点数表示小数是有误差的,一般做不到绝对的相等,只能判断小于某个很小的数比如10的-6次方

浮点数误差的问题
如果你一定的纠结运行的次数是8,而不是其它数据,你可以试试在其它PC上运行试试。
这个次数应该是一个随机的,不是确定的。

把double换成float试试

double 类型本身精度丢失,不能直接用>、<、==、!=来比较,需要自己规定一个精度误差范围(极小值,例如1e-10),误差在这个范围内就可以认为是相等的。