So habe ich eine Funktion, die etwa wie folgt aussieht:Kann man Variablen irgendwie verändern?
float function(){
float x = SomeValue;
return x/SomeOtherValue;
}
An einem gewissen Punkt, diese Funktion überläuft und gibt einen wirklich großen negativen Wert. Um zu versuchen, die Spur zu kommen, wo genau dies geschah, habe ich eine cout-Anweisung so, dass die Funktion sah wie folgt aus:
float function(){
float x = SomeValue;
cout << x;
return x/SomeOtherValue;
}
und es funktionierte! Natürlich habe ich das Problem mit einem Doppel gelöst. Aber ich bin neugierig, warum die Funktion richtig funktionierte, als ich es ansprach. Ist das typisch, oder könnte es irgendwo anders einen Fehler geben, den ich vermisse?
(Wenn es keine Hilfe ist, wird der Wert in dem Schwimmer gespeichert ist nur ein Integer-Wert, und keine besonders großen. Ich kann es nur in einem Schwimmer setzen Gießen zu vermeiden.)
Es gibt auch einen GCC-Hinweis dafür unter http://gcc.gnu.org/wiki/x87note Aufgrund dieses wunderbaren Verhaltens ist der Vergleich von Gleitkommaberechnungen ebenfalls inhärent fehlerhaft, sofern nicht vorberechnete Werte verwendet werden. – hazzen