命名空间
变体
操作

hypot, hypotf, hypotl

来自 cppreference.cn
< c‎ | 数值‎ | 数学
 
 
 
常用数学函数
函数
基本操作
(C99)
(C99)
(C99)
(C99)(C99)(C99)(C23)
最大值/最小值操作
(C99)
(C99)
指数函数
(C23)
(C99)
(C99)
(C23)
(C23)

(C99)
(C99)(C23)
(C23)
(C23)
幂函数
(C99)
(C23)
(C23)

hypot
(C99)
(C23)
(C23)
三角函数和双曲函数
(C23)
(C23)
(C23)
(C23)
(C99)
(C99)
(C99)
最近整数浮点数
(C99)(C99)(C99)
(C99)

(C99)(C99)(C99)
(C23)(C23)(C23)(C23)
浮点数操作
(C99)(C99)
(C99)(C23)
(C99)
窄化操作
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
量子与量子指数
十进制重新编码函数
总序和载荷函数
分类
(C99)
(C99)
(C99)
(C23)
误差函数和伽马函数
(C99)
(C99)
(C99)
(C99)
类型
宏常量
特殊浮点值
(C99)(C23)
参数和返回值
错误处理
快速操作指示符
 
定义于头文件 <math.h>
float       hypotf( float x, float y );
(1) (C99 起)
double      hypot( double x, double y );
(2) (C99 起)
long double hypotl( long double x, long double y );
(3) (C99 起)
定义于头文件 <tgmath.h>
#define hypot( x, y )
(4) (C99 起)
1-3) 计算 x 和 y 的平方和的平方根,在计算的中间阶段没有不必要的溢出或下溢。
4) 泛型宏:如果任何参数具有类型 long double,则调用该函数的 long double 版本。否则,如果任何参数具有整数类型或类型 double,则调用该函数的 double 版本。否则,调用该函数的 float 版本。

此函数计算的值是直角三角形斜边的长度,其边长分别为 xy,或者点 (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,则 hypot 等价于调用 fabs 并传入非零参数。
  • 如果其中一个参数为 ±∞,即使另一个参数为 NaN,hypot 也返回 +∞。
  • 否则,如果任何参数为 NaN,则返回 NaN。

[编辑] 注意

实现通常保证精度小于 1 ulp(最后一位的单位):GNUBSD

hypot(x, y) 等价于 cabs(x + I*y)

POSIX 指定,只有当两个参数都是非正规数且正确结果也是非正规数时,才会发生下溢(这禁止了简单的实现)。

hypot(INFINITY, NAN) 返回 +∞,但 sqrt(INFINITY * INFINITY + NAN * NAN) 返回 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 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

[编辑] 参考

  • C23 标准 (ISO/IEC 9899:2024)
  • 7.12.7.3 hypot 函数(p: 待定)
  • 7.25 类型通用数学 <tgmath.h> (p: TBD)
  • F.10.4.3 hypot 函数(p: 待定)
  • C17 标准 (ISO/IEC 9899:2018)
  • 7.12.7.3 hypot 函数(p: 181)
  • 7.25 类型通用数学 <tgmath.h> (p: 272-273)
  • F.10.4.3 hypot 函数(p: 382)
  • C11 标准 (ISO/IEC 9899:2011)
  • 7.12.7.3 hypot 函数(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 hypot 函数(p: 229)
  • 7.22 类型通用数学 <tgmath.h> (p: 335-337)
  • F.9.4.3 hypot 函数(p: 461)

[编辑] 另请参阅

(C99)(C99)
计算给定幂的数字 (xy)
(函数) [编辑]
(C99)(C99)
计算平方根 (x)
(函数) [编辑]
(C99)(C99)(C99)
计算立方根 (3x)
(函数) [编辑]
(C99)(C99)(C99)
计算复数的模
(函数) [编辑]
C++ 文档 用于 hypot