std::hypot
From cppreference.com
Defined in header <cmath>
|
||
float hypot( float x, float y ); |
(1) | (since C++11) |
double hypot( double x, double y ); |
(2) | (since C++11) |
long double hypot( long double x, long double y ); |
(3) | (since C++11) |
Promoted hypot( Arithmetic x, Arithmetic y ); |
(4) | (since C++11) |
Computes the square root of the sum of the squares of x and y, without undue overflow or underflow at intermediate stages of the computation. This 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+iy
4) If any argument has integral type, it is cast to double. If any other argument is long double, then the return type is long double, otherwise it is double.
Contents |
[edit] Parameters
x | - | floating point value |
y | - | floating point value |
[edit] Return value
The hypotenuse of a right-angled triangle, √x2
+y2
.
[edit] Exceptions
If the result overflows, a range error may occur and FE_OVERFLOW may be raised.
If the result is subnormal, an underflow error may occur and FE_UNDERFLOW may be raised.
[edit] Notes
Typical implementation strategy is to calculate an equivalent of u√1+(v |
u |
where u is std::max(x,y) and v is std::min(x,y).
[edit] Example
#include <cmath> #include <utility> #include <iostream> std::pair<double, double> cartesian_to_polar(double x, double y) { return {std::hypot(x, y), std::atan2(y,x)}; } int main() { std::pair<double, double> polar = cartesian_to_polar(1, 1); std::cout << "(1,1) cartesian is (" << polar.first << "," << polar.second<< ") polar\n"; }
Output:
(1,1) cartesian is (1.41421,0.785398) polar
[edit] See also
computes square root (√x) (function) | |
raises a number to the given power (xy) (function) | |
returns the magnitude of a complex number (function template) |