浮点型的精度有限,不适合用==运算符做精确比较。以下代码可以说明问题:
double i = 20.0;
double j = i / 7.0;
if (j * 7.0 == i)
printf("Equal.\n");
else
printf("Unequal.\n");
不同平台的浮点数实现有很多不同之处,在我的平台上运行这段程序结果为Unequal
,即使在你的平台上运行结果为Equal
,你再把i
改成其它值试试,总有些值会使得结果为Unequal
。
浮点型的精度有限,不适合用==运算符做精确比较。以下代码可以说明问题:
double i = 20.0;
double j = i / 7.0;
if (j * 7.0 == i)
printf("Equal.\n");
else
printf("Unequal.\n");
不同平台的浮点数实现有很多不同之处,在我的平台上运行这段程序结果为Unequal
,即使在你的平台上运行结果为Equal
,你再把i
改成其它值试试,总有些值会使得结果为Unequal
。