2016-10-29 1 views
0

私は私が言うループ持っ-0.000000負の2のゼロが0に等しくない?

として印刷されている二重のoutputを持っている:

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未満であることを言って、第三の条件を印刷し続けると問題を修正するにはどうすればよいですか?

+1

本当に-0ですか?これらの行の直前に 'printf(" output =%f \ n "、output);を追加すると、何が印刷されますか? – dbush

+1

また、 'output'はどのように割り当てられていますか? – dbush

+2

'=='を使って浮動小数点数を比較することは、(基本的に)決して動作しません。 – UnholySheep

答えて

5

これは、メモリ内の二重表現が正確でないために発生します。 たとえば、outputは-0.000000000000012に等しくなりますが、printfは最初の数字だけを出力します。 printf("%.20lf", output);を入力して数字をさらに印刷できます。

ただし、演​​算子==を浮動小数点で使用することはお勧めできません。

関連する問題