负双零不等于零?

negative double zero not equal to zero?

我有一个双 output 打印为 -0.000000

我有一个循环说:

if (output == 0) {
    printf("Continuing to go STRAIGHT.\n");
}
else if (output > 0) {
    printf("Turning LEFT.\n");
}
else if (output < 0) {
    printf("Turning RIGHT.\n");
}

这会一直打印第三个条件,即 -0.000000 小于 0。这是为什么?我该如何解决这个问题?

发生这种情况是因为内存中的双精度表示不准确。 例如,output 可以等于 -0.000000000000012,但 printf 只打印第一个数字。 您可以尝试 printf("%.20lf", output); 打印更多数字。

但是,将运算符 == 与浮点一起使用并不是一个好习惯。