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
가 반환됩니다.
언더플로우로 인한 범위 오류가 발생하면, 올바른 결과(반올림 후)가 반환됩니다.
오류 처리
오류는
math_errhandling
에 명시된 대로 보고됩니다.
구현이 IEEE 부동 소수점 연산(IEC 60559)을 지원하는 경우,
- hypot ( x, y ) , hypot ( y, x ) , 그리고 hypot ( x, - y ) 는 동등합니다
-
인수 중 하나가 ±0인 경우,
hypot은 0이 아닌 인수로 호출된 fabs 와 동등합니다 -
인수 중 하나가 ±∞인 경우,
hypot은 다른 인수가 NaN이더라도 +∞를 반환합니다 - 그 외의 경우, 인수 중 하나라도 NaN이면 NaN이 반환됩니다.
참고 사항
구현체들은 일반적으로 1 ulp 미만의 정밀도를 보장합니다( units in the last place ): GNU , BSD .
hypot ( x, y ) 는 cabs ( x + I * y ) 와 동등합니다.
POSIX는 언더플로우가 두 인수가 모두 서브노멀(subnormal)이고 올바른 결과도 서브노멀인 경우에만 발생할 수 있도록 명시합니다(이는 단순한 구현을 금지합니다).
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 함수들 (p: TBD)
-
- 7.25 타입-제네릭 수학 <tgmath.h> (p: TBD)
-
- F.10.4.3 hypot 함수들 (p: TBD)
- 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 The hypot functions (p: 229)
-
- 7.22 Type-generic math <tgmath.h> (p: 335-337)
-
- F.9.4.3 The hypot functions (p: 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
for
hypot
|
|