非常教程

C参考手册

数值 | Numerics

hypot

在头文件<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,则下限等同于使用非零参数调用的晶圆厂
  • 如果其中一个参数是±∞,那么即使另一个参数是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) polar
hypot(NAN,INFINITY) = inf
hypot(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 ++文档 |

C

C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。