Difference between revisions of "cpp/numeric/math/hypot"
(change note to refer to actual implementations.) |
m (Shorten template names. Use {{lc}} where appropriate.) |
||
Line 1: | Line 1: | ||
{{cpp/title|hypot}} | {{cpp/title|hypot}} | ||
{{cpp/numeric/math/navbar}} | {{cpp/numeric/math/navbar}} | ||
− | {{ | + | {{dcl begin}} |
− | {{ | + | {{dcl header | cmath}} |
− | {{ | + | {{dcl | notes={{mark since c++11}} |num=1| |
float hypot( float x, float y ); | float hypot( float x, float y ); | ||
}} | }} | ||
− | {{ | + | {{dcl | notes={{mark since c++11}} |num=2| |
double hypot( double x, double y ); | double hypot( double x, double y ); | ||
}} | }} | ||
− | {{ | + | {{dcl | notes={{mark since c++11}} |num=3| |
long double hypot( long double x, long double y ); | long double hypot( long double x, long double y ); | ||
}} | }} | ||
− | {{ | + | {{dcl | notes={{mark since c++11}} | num=4| |
Promoted hypot( Arithmetic x, Arithmetic y ); | Promoted hypot( Arithmetic x, Arithmetic y ); | ||
}} | }} | ||
− | {{ | + | {{dcl end}} |
Computes the square root of the sum of the squares of {{tt|x}} and {{tt|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 {{tt|x}} and {{tt|y}}, or the distance of the point {{tt|(x,y)}} from the origin {{tt|(0,0)}}, or the magnitude of a complex number {{tt|x+''i''y}} | Computes the square root of the sum of the squares of {{tt|x}} and {{tt|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 {{tt|x}} and {{tt|y}}, or the distance of the point {{tt|(x,y)}} from the origin {{tt|(0,0)}}, or the magnitude of a complex number {{tt|x+''i''y}} | ||
Line 22: | Line 22: | ||
===Parameters=== | ===Parameters=== | ||
− | {{ | + | {{par begin}} |
− | {{ | + | {{par | x | floating point value}} |
− | {{ | + | {{par | y | floating point value}} |
− | {{ | + | {{par end}} |
===Return value=== | ===Return value=== | ||
Line 32: | Line 32: | ||
===Exceptions=== | ===Exceptions=== | ||
− | If the result overflows, a range error may occur and {{ | + | If the result overflows, a range error may occur and {{lc|FE_OVERFLOW}} may be raised. |
If the result is subnormal, an underflow error may occur and {{c|FE_UNDERFLOW}} may be raised. | If the result is subnormal, an underflow error may occur and {{c|FE_UNDERFLOW}} may be raised. | ||
Line 64: | Line 64: | ||
===See also=== | ===See also=== | ||
− | {{ | + | {{dsc begin}} |
− | {{ | + | {{dsc inc | cpp/numeric/math/dcl list sqrt}} |
− | {{ | + | {{dsc inc | cpp/numeric/math/dcl list pow}} |
− | {{ | + | {{dsc inc | cpp/numeric/complex/dcl list abs}} |
− | {{ | + | {{dsc end}} |
[[de:cpp/numeric/math/hypot]] | [[de:cpp/numeric/math/hypot]] |
Revision as of 19:20, 31 May 2013
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 |
Parameters
x | - | floating point value |
y | - | floating point value |
Return value
The hypotenuse of a right-angled triangle, √x2+y2.
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.
Notes
Implementations usually guarantee precision of less than 1 ulp (units in the last place): GNU, BSD, Open64
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