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は非ゼロ引数で呼び出した fabs と等価である -
一方の引数が±∞の場合、他方の引数がNaNであっても
hypotは+∞を返す - それ以外の場合、いずれかの引数が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関数群 (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 hypot関数群 (p: 229)
-
- 7.22 総称数学 <tgmath.h> (p: 335-337)
-
- F.9.4.3 hypot関数群 (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
|
|