Wahrscheinlich ist diese Methode nur der Tropfen, der das Fass zum Überlaufen bringt. Diese Funktion wird sich höchstens einmal selbst aufrufen, also ist es nicht das Problem. (Bearbeiten: Oder es ist das NAN-Problem, auf das andere verweisen, wobei zu einer unendlichen Rekursion führt.)
Sie können die Funktion einfach nicht rekursiv machen, was eine einfachere Option ist.
%Vor% Ihr Problem ist, wenn x
keine Zahl ist. NAN >= 0.0
ist falsch, -NAN >= 0.0
ist ebenfalls falsch.
Sie könnten speziell gegen NAN überprüfen, wie andere vorgeschlagen haben, aber ich würde vorschlagen, Dinge zu vereinfachen:
%Vor%Dies hat den Vorteil, dass Compiler intelligentere Annahmen über sein Verhalten treffen können. Beachten Sie, dass ich die Funktion "intern" als statisch markiert habe (was den Umfang auf die aktuelle Kompilierungseinheit beschränkt). Sie können auch unbenannte Namespaces verwenden. (Bearbeiten Sie: Timothy Shields hat eine einfachere Möglichkeit, die Rekursion zu entfernen, die alles in einer Funktion hält)
Wenn x
NaN
ist, wird die Rekursion niemals beendet. Fügen Sie einen Scheck hinzu: Entweder std::isnan
in C ++ 11 oder die faule x != x
oder Document-and-blame-user. Wenn Sie sich entscheiden, NaN
zu behandeln, könnte es eine vernünftige Wahl sein, sie zu propagieren.
Tags und Links c++ stack-overflow