©
This document uses PHP Chinese website manual Release
在头文件<math.h>中定义 | ||
---|---|---|
float hypotf(float x,float y); | (1) | (自C99以来) |
double hypot(double x,double y); | (2) | (自C99以来) |
long double hypot(long double x,long double y); | (3) | (自C99以来) |
在头文件<tgmath.h>中定义 | ||
#define hypot(x,y) | (4) | (自C99以来) |
1-3)计算x和y平方和的平方根,而不会在计算的中间阶段发生不适当的上溢或下溢。
4)类型 - 通用宏:如果任何参数的类型为long double,则调用函数的长双重版本。 否则,如果任何参数具有整数类型或具有double类型,则调用该函数的双重版本。 否则,函数的float版本被调用。
由这个函数计算出的值是直角三角形的斜边长度,边长x和y,或点(x,y)与原点(0,0)的距离,或者 一个复数x + iy。
X | - | 浮点值 |
---|---|---|
y | - | 浮点值 |
如果没有错误发生,直角三角形的斜边√x2
+y2
,被返回。
如果发生由溢出引起的范围错误,则返回+ HUGE_VAL,+ HUGE_VALF或+ HUGE_VALL。
如果发生下溢引起的范围错误,则返回正确的结果(舍入后)。
按照math_errhandling中的指定报告错误。
如果实现支持IEEE浮点运算(IEC 60559),
hypot(x,y),hypot(y,x)和hypot(x,-y)是等价的
如果其中一个参数为±0,则下限等同于使用非零参数调用的fabs
如果其中一个参数是±∞,那么即使另一个参数是NaN,也会返回+∞
否则,如果任何参数是NaN,则返回NaN
实现通常保证精度小于1 ulp(最后一个单位):GNU,BSD,Open64。
hypot(x, y)
等同于 cabs(x + I*y)
.
POSIX指定只有当两个参数都是低于正常值且正确的结果也是低于正常值时才会发生下溢(这禁止了较为简单的实现)。
hypot(INFINITY,NAN)返回+∞,但sqrt(INFINITY * INFINITY + NAN * NAN)返回NaN。
#include <stdio.h>#include <math.h>#include <errno.h>#include <fenv.h>#include <float.h> #pragma STDC FENV_ACCESS ON int main(void){ // typical usage printf("(1,1) cartesian is (%f,%f) polar\n", hypot(1,1), atan2(1,1)); // special values printf("hypot(NAN,INFINITY) = %f\n", hypot(NAN,INFINITY)); // error handling errno = 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");}
可能的输出:
(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
C11标准(ISO / IEC 9899:2011):
7.12.7.3低级函数(p:248)
7.25类型通用数学<tgmath.h>(p:373-375)
F.10.4.3 hypot 函数(p:524)
C99标准(ISO / IEC 9899:1999):
7.12.7.3低级函数(p:229)
7.22类型通用数学<tgmath.h>(p:335-337)
F.9.4.3 hypot 函数(p:461)
powpowfpowl(C99)(C99) | 计算一个给定的功率(xy)(函数) |
---|---|
sqrtsqrtfsqrtl(C99)(C99) | 计算平方根(√x)(函数) |
cbrtcbrtfcbrtl(C99)(C99)(C99) | 计算立方根(3√x)(函数) |
cabscabsfcabsl(C99)(C99)(C99) | 计算复数(函数)的大小 |
| 关于hypot的C ++文档 |