名前空間
変種
操作

hypot, hypotf, hypotl

From cppreference.com
< c‎ | numeric‎ | math
 
 
 
共通の数学関数
関数
基本的な数学関数
(C99)
(C99)
(C99)
(C99)(C99)(C99)(C23)
最大/最小演算
(C99)
(C99)
指数関数
(C23)
(C99)
(C99)
(C23)
(C23)

(C99)
(C99)(C23)
(C23)
(C23)
べき乗関数
(C99)
(C23)
(C23)

hypot
(C99)
(C23)
(C23)
三角関数と双曲線関数
(C23)
(C23)
(C23)
(C23)
(C99)
(C99)
(C99)
最も近い整数浮動小数点数
(C99)(C99)(C99)
(C99)

(C99)(C99)(C99)
(C23)(C23)(C23)(C23)
浮動小数点操作
(C99)(C99)
(C99)(C23)
(C99)
縮小演算
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
量子および量子指数
Decimal再エンコーディング関数
総順序およびペイロード関数
分類
(C99)
(C99)
(C99)
(C23)
誤差関数とガンマ関数
(C99)
(C99)
(C99)
(C99)
マクロ定数
特殊な浮動小数点値
(C99)(C23)
引数と戻り値
エラーハンドリング
高速演算インジケータ
 
ヘッダー <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以降)
1-3) x および y の二乗和の平方根を、計算の中間段階での過度のオーバーフローやアンダーフローなしに計算します。
4) 型汎用マクロ: いずれかの引数が long double 型の場合、関数の long double バージョンが呼び出されます。それ以外の場合、いずれかの引数が整数型または double 型の場合、関数の double バージョンが呼び出されます。それ以外の場合、float バージョンが呼び出されます。

この関数によって計算される値は、長さ x および y の辺を持つ直角三角形の斜辺の長さ、または点 (x, y) から原点 (0, 0) までの距離、または複素数 x+iy の大きさです。

目次

[編集] パラメータ

x - floating-point value
y - floating-point value

[編集] 戻り値

エラーが発生しなかった場合、直角三角形の斜辺、すなわち 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 と同等です。
  • 引数のいずれかが ±∞ の場合、もう一方の引数が NaN であっても hypot は +∞ を返します。
  • それ以外の場合、引数のいずれかが NaN であれば、NaN が返されます。

[編集] 注記

実装では通常、1 ulp(最下位桁における単位)未満の精度が保証されます(GNUBSD)。

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 The hypot functions (p: TBD)
  • 7.25 Type-generic math <tgmath.h> (p: TBD)
  • F.10.4.3 The hypot functions (p: TBD)
  • C17標準 (ISO/IEC 9899:2018)
  • 7.12.7.3 The hypot functions (p: 181)
  • 7.25 型総称数学関数 <tgmath.h> (p: 272-273)
  • F.10.4.3 The hypot functions (p: 382)
  • C11標準 (ISO/IEC 9899:2011)
  • 7.12.7.3 The hypot functions (p: 248)
  • 7.25 型総称数学関数 <tgmath.h> (p: 373-375)
  • F.10.4.3 The hypot functions (p: 524)
  • C99標準 (ISO/IEC 9899:1999)
  • 7.12.7.3 The hypot functions (p: 229)
  • 7.22 型総称数学関数 <tgmath.h> (p: 335-337)
  • F.9.4.3 The hypot functions (p: 461)

[編集] 関連項目

(C99)(C99)
指定されたべき乗の数を計算する (xy)
(関数) [編集]
(C99)(C99)
平方根を計算する (x)
(関数) [編集]
(C99)(C99)(C99)
立方根を計算する (3x)
(関数) [編集]
(C99)(C99)(C99)
複素数の絶対値を計算する
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)