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, y) или модуль комплексного числа x+iy.
Параметры
| x | - | число с плавающей точкой |
| y | - | число с плавающей точкой |
Возвращаемое значение
Если ошибок не возникает, возвращается длина гипотенузы прямоугольного треугольника, \(\scriptsize{\sqrt{x^2+y^2} }\)√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с ненулевым аргументом - если один из аргументов равен ±∞,
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)
{
// 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 (стр.: уточняется)
- 7.25 Типо-обобщённая математика <tgmath.h> (стр.: уточняется)
- F.10.4.3 Функции hypot (стр.: уточняется)
- Стандарт 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}\)xy) (функция) |
|
(C99)(C99) | вычисляет квадратный корень (\(\small{\sqrt{x} }\)√x) (функция) |
|
(C99)(C99)(C99) | вычисляет кубический корень (\(\small{\sqrt[3]{x} }\)3√x) (функция) |
|
(C99)(C99)(C99) | вычисляет модуль комплексного числа (функция) |
Документация C++ для hypot |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/numeric/math/hypot