如何解释这个极简单的C现象

来源:百度知道 编辑:UC知道 时间:2024/06/21 05:03:04
我打这个
int main(void) {
if (0.1 * 0.1 == 0.01)
printf("equal\n");
return 0;
}
没有print任何东西

但我打这个
int main(void) {
if (0.1 * 0.1 - 0.01 <= 0.0001)
printf("equal\n");
return 0;
}
就有equal

请详细解释一下,谢谢

机器上浮点数的表示和计算都不是绝对精确的,
0.1 * 0.1 计算后的结果不见得恰恰和
0.01 的存储表示完全一致,
故产生那种结果,
而0.1 * 0.1 - 0.01 <= 0.0001是以一种误差范围来判断
两个浮点数是否相等的,故可能得到预期结果