hypot, hypotf, hypotl
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Определено в заголовочном файле
<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) |
Значение, вычисляемое этой функцией, представляет собой длину гипотенузы прямоугольного треугольника со сторонами длиной
x
и
y
, или расстояние точки
(
x, y
)
от начала координат
(
0
,
0
)
, или модуль комплексного числа
x+
i
y
.
Содержание |
Параметры
| x | - | значение с плавающей точкой |
| y | - | значение с плавающей точкой |
Возвращаемое значение
Если ошибок не возникает, возвращается гипотенуза прямоугольного треугольника,
\(\scriptsize{\sqrt{x^2+y^2} }\)
√
x
2
+y
2
.
Если происходит ошибка диапазона из-за переполнения,
+HUGE_VAL
,
+HUGE_VALF
, или
+HUGE_VALL
возвращается.
Если происходит ошибка диапазона из-за потери значимости (underflow), возвращается корректный результат (после округления).
Обработка ошибок
Ошибки сообщаются, как указано в
math_errhandling
.
Если реализация поддерживает арифметику с плавающей запятой IEEE (IEC 60559),
- hypot ( x, y ) , hypot ( y, x ) и hypot ( x, - y ) эквивалентны
-
если один из аргументов равен ±0,
hypotэквивалентен вызову fabs с ненулевым аргументом -
если один из аргументов равен ±∞,
hypotвозвращает +∞ даже если другой аргумент равен NaN - в остальных случаях, если любой из аргументов равен NaN, возвращается NaN
Примечания
Реализации обычно гарантируют точность менее 1 ulp ( единиц в последнем разряде ): GNU , BSD .
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) { // типичное использование printf("(1,1) cartesian is (%f,%f) polar\n", hypot(1,1), atan2(1, 1)); // специальные значения printf("hypot(NAN,INFINITY) = %f\n", hypot(NAN, INFINITY)); // обработка ошибок 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 (стр.: TBD)
-
- 7.25 Обобщённая математика <tgmath.h> (стр.: TBD)
-
- F.10.4.3 Функции hypot (стр.: TBD)
- Стандарт C17 (ISO/IEC 9899:2018):
-
- 7.12.7.3 Функции hypot (стр. 181)
-
- 7.25 Обобщенная математика <tgmath.h> (стр. 272-273)
-
- F.10.4.3 Функции hypot (стр. 382)
- Стандарт C11 (ISO/IEC 9899:2011):
-
- 7.12.7.3 Функции hypot (стр. 248)
-
- 7.25 Обобщенная математика <tgmath.h> (стр. 373-375)
-
- F.10.4.3 Функции hypot (стр. 524)
- Стандарт C99 (ISO/IEC 9899:1999):
-
- 7.12.7.3 Функции hypot (стр. 229)
-
- 7.22 Обобщенная математика <tgmath.h> (стр. 335-337)
-
- F.9.4.3 Функции hypot (стр. 461)
Смотрите также
|
(C99)
(C99)
|
вычисляет число, возведённое в заданную степень (
\(\small{x^y}\)
x
y
)
(функция) |
|
(C99)
(C99)
|
вычисляет квадратный корень (
\(\small{\sqrt{x} }\)
√
x
)
(функция) |
|
(C99)
(C99)
(C99)
|
вычисляет кубический корень (
\(\small{\sqrt[3]{x} }\)
3
√
x
)
(функция) |
|
(C99)
(C99)
(C99)
|
вычисляет модуль комплексного числа
(функция) |
|
C++ documentation
для
hypot
|
|