Start · Sprachen · PHP · Referenz · hypot

hypot

Funktion

Berechnet die Länge der Hypotenuse eines rechtwinkligen Dreiecks anhand der beiden Katheten <code>x</code> und <code>y</code>.

seit PHP 4.1.0 Kategorie: math

Signatur

hypot(float $x, float $y): float

Beschreibung

hypot() berechnet die Länge der Hypotenuse eines rechtwinkligen Dreiecks mit den Katheten x und y. Mathematisch entspricht dies dem Ausdruck sqrt(x² + y²), also der Quadratwurzel aus der Summe der Quadrate beider Katheten (Satz des Pythagoras).

Im Gegensatz zur manuellen Berechnung mit sqrt($x * $x + $y * $y) ist hypot() numerisch stabiler und vermeidet Überläufe sowie Unterläufe bei sehr großen oder sehr kleinen Gleitkommazahlen, da intern eine skalierte Berechnung verwendet wird.

Die Funktion ist nicht nur für geometrische Berechnungen sinnvoll, sondern überall dort, wo der euklidische Abstand zweier Punkte im zweidimensionalen Raum benötigt wird – etwa in der Spieleentwicklung, der Bildverarbeitung oder bei physikalischen Simulationen.

Negative Eingabewerte sind erlaubt, da die Quadrierung das Vorzeichen aufhebt. Das Ergebnis ist stets eine nicht-negative Gleitkommazahl.

Parameter

Name Typ Default Beschreibung
$x Pflicht float Länge der ersten Kathete (horizontale Komponente). Negative Werte sind erlaubt.
$y Pflicht float Länge der zweiten Kathete (vertikale Komponente). Negative Werte sind erlaubt.

Rückgabewert

Typ
float
Beschreibung
Die Länge der Hypotenuse als nicht-negative Gleitkommazahl. Das Ergebnis entspricht sqrt(x² + y²).

Beispiele

Klassisches 3-4-5-Dreieck

<?php
// Bekanntes rechtwinkliges Dreieck mit Katheten 3 und 4 → Hypotenuse = 5
$hypotenuse = hypot(3, 4);
echo $hypotenuse; // 5
5

Euklidischen Abstand zweier Punkte berechnen

<?php
// Abstand zwischen Punkt A (2, 3) und Punkt B (7, 10) im 2D-Raum
$ax = 2; $ay = 3;
$bx = 7; $by = 10;

$abstand = hypot($bx - $ax, $by - $ay);
echo round($abstand, 4); // sqrt(25 + 49) = sqrt(74)
8.6023

Vergleich mit manueller Berechnung bei großen Werten

<?php
// Bei sehr großen Zahlen kann die manuelle Variante zu Overflow führen,
// hypot() bleibt numerisch stabil
$x = 1.0e200;
$y = 1.0e200;

// Manuelle Variante würde INF liefern
$manuell = sqrt($x * $x + $y * $y);
echo "Manuell: $manuell\n"; // INF

// hypot() berechnet intern skaliert und liefert korrektes Ergebnis
$korrekt = hypot($x, $y);
echo "hypot:   $korrekt\n"; // 1.4142135623731E+200
Manuell: INF hypot: 1.4142135623731E+200

// Wichtig · Fallstricke

Numerische Stabilität: Statt sqrt($x * $x + $y * $y) sollte immer hypot() bevorzugt werden, wenn Eingabewerte sehr groß oder sehr klein sein können. Die interne Implementierung skaliert die Werte vor der Berechnung, um Gleitkommaüberläufe (INF) und -unterläufe (0) zu vermeiden.

Für den dreidimensionalen euklidischen Abstand kann hypot() verschachtelt werden: hypot(hypot($x, $y), $z) – dies bleibt ebenfalls numerisch stabil.

Siehe auch