函数
<cmath> <ctgmath>

hypot

     double hypot  (double x     , double y);      float hypotf (float x      , float y);long double hypotl (long double x, long double y);
     double hypot (double x     , double y);      float hypot (float x      , float y);long double hypot (long double x, long double y);     double hypot (Type1 x      , Type2 y);       // additional overloads
计算斜边
返回直角三角形两直角边为 xy 的斜边长度。

该函数返回的值相当于 x 平方与 y 平方之和的平方根(根据勾股定理),但避免了中间值溢出或下溢。

头文件 <tgmath.h> 提供了此函数的类型通用宏版本。
此头文件(<cmath>)还提供了其他算术类型的重载(Type1Type2):这些重载实际上会将参数转换为 double 类型进行计算,除非至少有一个参数是 long double 类型(在这种情况下,两者都会被转换为 long double)。

参数

x, y
用于计算斜边的直角三角形直角边的浮点数值。

返回值

(x2+y2) 的平方根。
如果结果的绝对值过大,无法用返回类型的值表示,则函数可能会返回具有正确符号的 HUGE_VAL(或 HUGE_VALFHUGE_VALL)(此时会发生溢出范围错误)。

如果发生上溢范围错误
- 并且 math_errhandling 设置了 MATH_ERRNO:全局变量 errno 被设置为 ERANGE
- 并且 math_errhandling 设置了 MATH_ERREXCEPT:将引发 FE_OVERFLOW

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
/* hypot example */
#include <stdio.h>      /* printf */
#include <math.h>       /* hypot */

int main ()
{
  double leg_x, leg_y, result;
  leg_x = 3;
  leg_y = 4;
  result = hypot (leg_x, leg_y);
  printf ("%f, %f and %f form a right-angled triangle.\n",leg_x,leg_y,result);
  return 0;
}

输出

3.000000, 4.000000 and 5.000000 form a right-angled triangle.


另见