|
|
|
Defined in header <math.h> | ||
float hypotf(float x,float y); | (1) | (since C99) |
double hypot(double x,double y); | (2) | (since C99) |
longdouble hypotl(longdouble x,longdouble y); | (3) | (since C99) |
Defined in header <tgmath.h> | ||
#define hypot( x, y ) | (4) | (since C99) |
The value computed by this function is the length of the hypotenuse of a right-angled triangle with sides of lengthx andy, or the distance of the point(x, y) from the origin(0,0), or the magnitude of a complex numberx+iy
.
Contents |
x | - | floating-point value |
y | - | floating-point value |
If no errors occur, the hypotenuse of a right-angled triangle,\(\scriptsize{\sqrt{x^2+y^2} }\)√x2
+y2
, is returned.
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.
Errors are reported as specified inmath_errhandling
.
If the implementation supports IEEE floating-point arithmetic (IEC 60559),
hypot
is equivalent tofabs called with the non-zero argumenthypot
returns +∞ even if the other argument is NaNImplementations usually guarantee precision of less than 1 ulp (units in the last place):GNU,BSD.
hypot(x, y) is equivalent tocabs(x+ I*y).
POSIX specifies that underflow may only occur when both arguments are subnormal and the correct result is also subnormal (this forbids naive implementations).
hypot(INFINITY, NAN) returns +∞, butsqrt(INFINITY* INFINITY+ NAN* NAN) returns NaN.
#include <errno.h>#include <fenv.h>#include <float.h>#include <math.h>#include <stdio.h>// #pragma STDC FENV_ACCESS ON int main(void){// typical usageprintf("(1,1) cartesian is (%f,%f) polar\n", hypot(1,1),atan2(1,1)); // special valuesprintf("hypot(NAN,INFINITY) = %f\n", hypot(NAN, INFINITY)); // error handlingerrno=0;feclearexcept(FE_ALL_EXCEPT);printf("hypot(DBL_MAX,DBL_MAX) = %f\n", hypot(DBL_MAX,DBL_MAX));if(errno==ERANGE)perror(" errno == ERANGE");if(fetestexcept(FE_OVERFLOW))puts(" FE_OVERFLOW raised");}
Possible output:
(1,1) cartesian is (1.414214,0.785398) polarhypot(NAN,INFINITY) = infhypot(DBL_MAX,DBL_MAX) = inf errno == ERANGE: Numerical result out of range FE_OVERFLOW raised
(C99)(C99) | computes a number raised to the given power (\(\small{x^y}\)xy) (function)[edit] |
(C99)(C99) | computes square root (\(\small{\sqrt{x} }\)√x) (function)[edit] |
(C99)(C99)(C99) | computes cube root (\(\small{\sqrt[3]{x} }\)3√x) (function)[edit] |
(C99)(C99)(C99) | computes the magnitude of a complex number (function)[edit] |
C++ documentation forhypot |