负双零不等于零?
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);
打印更多数字。
但是,将运算符 ==
与浮点一起使用并不是一个好习惯。
我有一个双 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);
打印更多数字。
但是,将运算符 ==
与浮点一起使用并不是一个好习惯。