std::hypot, std::hypotf, std::hypotl
| Definiert in der Header-Datei <cmath> |
||
| (1) | ||
float hypot ( float x, float y ); double hypot ( double x, double y ); |
(seit C++11) (bis C++23) |
|
| /* Gleitkommazahl-Typ */ hypot ( /* Gleitkommazahl-Typ */ x, |
(seit C++23) (constexpr seit C++26) |
|
float hypotf( float x, float y ); |
(2) | (seit C++11) (constexpr seit C++26) |
long double hypotl( long double x, long double y ); |
(3) | (seit C++11) (constexpr seit C++26) |
| (4) | ||
float hypot ( float x, float y, float z ); double hypot ( double x, double y, double z ); |
(seit C++17) (bis C++23) |
|
| /* Gleitkommazahl-Typ */ hypot ( /* Gleitkommazahl-Typ */ x, |
(seit C++23) (constexpr seit C++26) |
|
| Definiert in der Header-Datei <cmath> |
||
template< class Arithmetic1, Arithmetic2 > /*gemeinsamer Gleitkommazahl-Typ*/ |
(A) | (seit C++11) (constexpr seit C++26) |
| template< class Arithmetic1, Arithmetic2, Arithmetic3 > /*gemeinsamer Gleitkommazahl-Typ*/ |
(B) | (seit C++17) |
std::hypot für alle cv-unqualifizierten Gleitkommazahl-Typen als Typ der Parameter x und y bereit.(seit C++23)std::hypot für alle cv-unqualifizierten Gleitkommazahl-Typen als Typ der Parameter x, y und z bereit.(seit C++23)Der von der zweistelligen Version dieser Funktion berechnete Wert ist die Länge der Hypotenuse eines rechtwinkligen Dreiecks mit den Seitenlängen x und y, oder der Abstand des Punktes (x,y) vom Ursprung (0,0), oder die Magnitude einer komplexen Zahl x+iy.
Der von der dreistelligen Version dieser Funktion berechnete Wert ist der Abstand des Punktes (x,y,z) vom Ursprung (0,0,0).
Inhalt |
[edit] Parameter
| x, y, z | - | Gleitkomma- oder Ganzzahlwerte |
[edit] Rückgabewert
+y2
.
+y2
+z2
.
Wenn ein Bereichsfehler aufgrund von Überlauf auftritt, wird +HUGE_VAL, +HUGE_VALF oder +HUGE_VALL zurückgegeben.
Wenn ein Bereichsfehler aufgrund von Unterlauf auftritt, wird das korrekte Ergebnis (nach Rundung) zurückgegeben.
[edit] Fehlerbehandlung
Fehler werden wie in math_errhandling beschrieben gemeldet.
Wenn die Implementierung IEEE-Gleitkomma-Arithmetik (IEC 60559) unterstützt,
- std::hypot(x, y), std::hypot(y, x) und std::hypot(x, -y) sind äquivalent.
- Wenn einer der Argumente ±0 ist, ist std::hypot(x, y) äquivalent zu std::fabs, aufgerufen mit dem Nicht-Null-Argument.
- Wenn einer der Argumente ±∞ ist, gibt std::hypot(x, y) +∞ zurück, auch wenn das andere Argument NaN ist.
- Andernfalls, wenn eines der Argumente NaN ist, wird NaN zurückgegeben.
[edit] Hinweise
Implementierungen garantieren normalerweise eine Präzision von weniger als 1 ulp (Unit in the Last Place — Einheit der letzten Stelle): GNU, BSD.
std::hypot(x, y) ist äquivalent zu std::abs(std::complex<double>(x, y)).
POSIX schreibt vor, dass ein Unterlauf nur auftreten darf, wenn beide Argumente subnormal sind und das korrekte Ergebnis ebenfalls subnormal ist (dies verbietet naive Implementierungen).
|
Der Abstand zwischen zwei Punkten |
(seit C++17) |
Die zusätzlichen Überladungen müssen nicht exakt wie in (A,B) bereitgestellt werden. Sie müssen nur ausreichen, um sicherzustellen, dass für ihr erstes Argument num1, zweites Argument num2 und optional drittes Argument num3
|
(bis C++23) |
|
Wenn num1, num2 und num3 arithmetische Typen haben, dann
wobei /*gemeinsamer Gleitkommazahl-Typ*/ der Gleitkommazahltyp mit dem höchsten Gleitkomma-Umwandlungsrang und dem höchsten Gleitkomma-Umwandlungs-Subrang unter den Typen von num1, num2 und num3 ist. Argumente vom Ganzzahltyp werden so betrachtet, als hätten sie den gleichen Gleitkomma-Umwandlungsrang wie double. Wenn kein solcher Gleitkommazahltyp mit dem höchsten Rang und Subrang existiert, dann führt die Überladungsauflösung nicht zu einem nutzbaren Kandidaten aus den bereitgestellten Überladungen. |
(seit C++23) |
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_hypot |
201603L |
(C++17) | 3-Argument-Überladung von std::hypot (4,B) |
[edit] Beispiel
#include <cerrno> #include <cfenv> #include <cfloat> #include <cmath> #include <cstring> #include <iostream> // #pragma STDC FENV_ACCESS ON struct Point3D { float x, y, z; }; int main() { // typical usage std::cout << "(1,1) cartesian is (" << std::hypot(1, 1) << ',' << std::atan2(1,1) << ") polar\n"; Point3D a{3.14, 2.71, 9.87}, b{1.14, 5.71, 3.87}; // C++17 has 3-argument hypot overload: std::cout << "distance(a,b) = " << std::hypot(a.x - b.x, a.y - b.y, a.z - b.z) << '\n'; // special values std::cout << "hypot(NAN,INFINITY) = " << std::hypot(NAN, INFINITY) << '\n'; // error handling errno = 0; std::feclearexcept(FE_ALL_EXCEPT); std::cout << "hypot(DBL_MAX,DBL_MAX) = " << std::hypot(DBL_MAX, DBL_MAX) << '\n'; if (errno == ERANGE) std::cout << " errno = ERANGE " << std::strerror(errno) << '\n'; if (std::fetestexcept(FE_OVERFLOW)) std::cout << " FE_OVERFLOW raised\n"; }
Ausgabe
(1,1) cartesian is (1.41421,0.785398) polar
distance(a,b) = 7
hypot(NAN,INFINITY) = inf
hypot(DBL_MAX,DBL_MAX) = inf
errno = ERANGE Numerical result out of range
FE_OVERFLOW raised[edit] Siehe auch
| (C++11)(C++11) |
erhöht eine Zahl zur gegebenen Potenz (xy) (Funktion) |
| (C++11)(C++11) |
berechnet die Quadratwurzel (√x) (Funktion) |
| (C++11)(C++11)(C++11) |
berechnet die Kubikwurzel (3√x) (Funktion) |
| gibt den Betrag einer komplexen Zahl zurück (function template) | |
| C-Dokumentation für hypot
| |