源代码:
#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),误差在这个范围内就可以认为是相等的。