2016-10-29 5 views
0

Ich habe ein Doppel output, die gedruckt wird als -0.000000negative doppelte Null ungleich Null?

ich eine Schleife haben, die sagt:

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"); 
} 

Dies hält die dritte Bedingung Druck und sagte, dass -,000000 weniger als 0 Warum ist dies und wie kann ich das Problem beheben?

+1

Sind Sie sicher, dass es -0 ist? Wenn Sie 'printf (" output =% f \ n ", Ausgabe);' direkt vor diesen Zeilen hinzufügen, was wird gedruckt? – dbush

+1

Wie wird 'Ausgabe' zugewiesen? – dbush

+2

Das Vergleichen von Fließkommazahlen mit '==' wird (grundsätzlich) nie funktionieren. – UnholySheep

Antwort

5

Dies passiert, weil die doppelte Darstellung im Speicher nicht exakt ist. Beispiel: output kann gleich -0,000000000000012 sein, aber printf werden nur die ersten Ziffern gedruckt. Sie können printf("%.20lf", output); versuchen, weitere Ziffern zu drucken.

Es ist jedoch keine gute Praxis, den Operator == mit Gleitkommazahlen zu verwenden.

Verwandte Themen