Die hypot-Funktion

In diversen Fällen ist mir aufgefallen, dass nur Wenige die Funktion hypot („euclidean distance function“) kennen. Mit dieser Funktionen lässt sich elegant der Abstand zwischen zwei Punkten berechnen anstatt die Quadratwurzel aus dem Abstandsquadrat zu berechnen, welcher über den Satz von Pythagoras berechnet wurde.

NSPoint p1, p2;
CGFloat dx = p2.x - p1.x;
CGFloat dy = p2.y - p1.y;

CGFloat length = sqrtf(dx * dx + dy * dy);

Der Abstand lässt sich leichter und wie ich finde weniger fehleranfällig wie folgt berechnen:

CGFloat length = hypotf(dx, dy);

In meinen Verständnis hatte ich immer angenommen, dass die Funktion schneller sein könnte. Und um dies zu überprüfen habe ich ein kleines Programm (git://gist.github.com/1579069.git) geschrieben. Ich musste allerdings feststellen, dass tatsächlich die Funktion hypot langsamer war. Da der Unterschied wie ich finde minimal ist, werde ich weiterhin die Funktion hypot bevorzugen.

Result 1273819835.661994 in 14.537325 seconds (Sqrt)

Result 1273819836.367576 in 19.332056 seconds (Hypot)

 

Back