std:: hypot, std:: hypotf, std:: hypotl
Defined in header
<cmath>
|
||
(1) | ||
float
hypot
(
float
x,
float
y
)
;
double
hypot
(
double
x,
double
y
)
;
|
(since C++11)
(until C++23) |
|
/* floating-point-type */
hypot
(
/* floating-point-type */
x,
|
(since C++23)
(constexpr since C++26) |
|
float
hypotf
(
float
x,
float
y
)
;
|
(2) |
(since C++11)
(constexpr since C++26) |
long
double
hypotl
(
long
double
x,
long
double
y
)
;
|
(3) |
(since C++11)
(constexpr since C++26) |
(4) | ||
float
hypot
(
float
x,
float
y,
float
z
)
;
double
hypot
(
double
x,
double
y,
double
z
)
;
|
(since C++17)
(until C++23) |
|
/* floating-point-type */
hypot
(
/* floating-point-type */
x,
|
(since C++23)
(constexpr since C++26) |
|
Defined in header
<cmath>
|
||
template
<
class
Arithmetic1, Arithmetic2
>
/* common-floating-point-type */
|
(A) |
(since C++11)
(constexpr since C++26) |
template
<
class
Arithmetic1, Arithmetic2, Arithmetic3
>
/* common-floating-point-type */
|
(B) |
(since C++17)
(constexpr since C++26) |
std::hypot
for all cv-unqualified floating-point types as the type of the parameters
x
and
y
.
(since C++23)
std::hypot
for all cv-unqualified floating-point types as the type of the parameters
x
,
y
and
z
.
(since C++23)
The value computed by the two-argument version of this function is the length of the hypotenuse of a right-angled triangle with sides of length
x
and
y
, or the distance of the point
(x,y)
from the origin
(0,0)
, or the magnitude of a complex number
x+
i
y
.
The value computed by the three-argument version of this function is the distance of the point
(x,y,z)
from the origin
(0,0,0)
.
Parameters
x, y, z | - | floating-point or integer values |
Return value
If a range error due to overflow occurs,
+HUGE_VAL
,
+HUGE_VALF
, or
+HUGE_VALL
is returned.
If a range error due to underflow occurs, the correct result (after rounding) is returned.
Error handling
Errors are reported as specified in math_errhandling .
If the implementation supports IEEE floating-point arithmetic (IEC 60559),
- std :: hypot ( x, y ) , std :: hypot ( y, x ) , and std :: hypot ( x, - y ) are equivalent.
- if one of the arguments is ±0, std :: hypot ( x, y ) is equivalent to std::fabs called with the non-zero argument.
- if one of the arguments is ±∞, std :: hypot ( x, y ) returns +∞ even if the other argument is NaN.
- otherwise, if any of the arguments is NaN, NaN is returned.
Notes
Implementations usually guarantee precision of less than 1 ulp (Unit in the Last Place — Unit of Least Precision): GNU , BSD .
std :: hypot ( x, y ) is equivalent to std :: abs ( std:: complex < double > ( x, y ) ) .
POSIX specifies that underflow may only occur when both arguments are subnormal and the correct result is also subnormal (this forbids naive implementations).
Distance between two points
|
(since C++17) |
The additional overloads are not required to be provided exactly as (A,B) . They only need to be sufficient to ensure that for their first argument num1 , second argument num2 and the optional third argument num3 :
|
(until C++23) |
If num1 , num2 and num3 have arithmetic types, then
where /* common-floating-point-type */ is the floating-point type with the greatest floating-point conversion rank and greatest floating-point conversion subrank among the types of num1 , num2 and num3 , arguments of integer type are considered to have the same floating-point conversion rank as double . If no such floating-point type with the greatest rank and subrank exists, then overload resolution does not result in a usable candidate from the overloads provided. |
(since C++23) |
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_hypot
|
201603L | (C++17) |
3-argument overload of
std::hypot
|
Example
#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"; }
Output:
(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
See also
(C++11)
(C++11)
|
raises a number to the given power (
x
y
)
(function) |
(C++11)
(C++11)
|
computes square root (
√
x
)
(function) |
(C++11)
(C++11)
(C++11)
|
computes cube root (
3
√
x
)
(function) |
returns the magnitude of a complex number
(function template) |
|
C documentation
for
hypot
|