Namespaces
Variants

hypot, hypotf, hypotl

From cppreference.net
< c ‎ | numeric ‎ | math
Common mathematical functions
Functions
Basic operations
(C99)
(C99)
(C99)
(C99) (C99) (C99) (C23)
Maximum/minimum operations
Exponential functions
Power functions
hypot
(C99)
(C23)
(C23)
Trigonometric and hyperbolic functions
Nearest integer floating-point
(C99) (C99) (C99)
(C23) (C23) (C23) (C23)
Floating-point manipulation
Narrowing operations
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
Quantum and quantum exponent
Decimal re-encoding functions
Total order and payload functions
Classification
Error and gamma functions
(C99)
(C99)
(C99)
(C99)
Types
Macro constants
Special floating-point values
Arguments and return values
Error handling
Fast operation indicators
ヘッダーで定義 <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+ i y の絶対値です。

目次

パラメータ

x - 浮動小数点値
y - 浮動小数点値

戻り値

エラーが発生しない場合、直角三角形の斜辺、 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)
指定された累乗を計算する ( x y )
(関数)
(C99) (C99)
平方根を計算する ( x )
(関数)
(C99) (C99) (C99)
立方根を計算する ( 3 x )
(関数)
(C99) (C99) (C99)
複素数の絶対値を計算する
(関数)