名前空間
変種
操作

sqrt, sqrtf, sqrtl

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)
べき乗関数
sqrt
(C99)
(C23)
(C23)

(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       sqrtf( float arg );
(1) (C99以降)
double      sqrt( double arg );
(2)
long double sqrtl( long double arg );
(3) (C99以降)
ヘッダー <tgmath.h> で定義
#define sqrt( arg )
(4) (C99以降)
1-3) arg の平方根を計算します。
4) 型汎用マクロ: arg の型が long double の場合、`sqrtl` が呼び出されます。それ以外の場合で、arg が整数型または double 型の場合、`sqrt` が呼び出されます。それ以外の場合、`sqrtf` が呼び出されます。arg が複素数または虚数の場合、マクロは対応する複素数関数(csqrtfcsqrtcsqrtl)を呼び出します。

目次

[編集] パラメータ

arg - floating-point value

[編集] 戻り値

エラーが発生しない場合、arg の平方根(arg)が返されます。

領域エラーが発生した場合、実装定義の値が返される (サポートされている場合はNaN)。

アンダーフローによる範囲エラーが発生した場合、正確な結果 (丸め後) が返される。

[編集] エラー処理

エラーは math_errhandling で指定されたとおりに報告されます。

arg がゼロ未満の場合、定義域エラーが発生します。

実装がIEEE浮動小数点算術 (IEC 60559) をサポートしている場合、

  • 引数が -0 未満の場合、FE_INVALID が発生し、NaN が返されます。
  • 引数が +∞ または ±0 の場合、引数は変更されずに返されます。
  • 引数が NaN の場合、NaN が返されます。

[編集] 注釈

IEEE 標準では、`sqrt` は無限精度の結果から正しく丸められることが要求されています。特に、浮動小数点型で表現できる場合は正確な結果が生成されます。これを要求される他の演算は、算術演算子と `fma` 関数のみです。`pow` を含む他の関数は、これに制約されません。

[編集]

#include <errno.h>
#include <fenv.h>
#include <math.h>
#include <stdio.h>
// #pragma STDC FENV_ACCESS ON
 
int main(void)
{
    // normal use
    printf("sqrt(100) = %f\n", sqrt(100));
    printf("sqrt(2) = %f\n", sqrt(2));
    printf("golden ratio = %f\n", (1 + sqrt(5)) / 2);
 
    // special values
    printf("sqrt(-0) = %f\n", sqrt(-0.0));
 
    // error handling
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf("sqrt(-1.0) = %f\n", sqrt(-1));
    if (errno == EDOM)
        perror("    errno == EDOM");
    if (fetestexcept(FE_INVALID))
        puts("    FE_INVALID was raised");
}

実行結果の例

sqrt(100) = 10.000000
sqrt(2) = 1.414214
golden ratio = 1.618034
sqrt(-0) = -0.000000
sqrt(-1.0) = -nan
    errno = EDOM: Numerical argument out of domain
    FE_INVALID was raised

[編集] 参考文献

  • C23標準 (ISO/IEC 9899:2024)
  • 7.12.7.5 The sqrt functions (p: TBD)
  • 7.25 Type-generic math <tgmath.h> (p: TBD)
  • F.10.4.5 The sqrt functions (p: TBD)
  • C17標準 (ISO/IEC 9899:2018)
  • 7.12.7.5 The sqrt functions (p: TBD)
  • 7.25 Type-generic math <tgmath.h> (p: TBD)
  • F.10.4.5 The sqrt functions (p: TBD)
  • C11標準 (ISO/IEC 9899:2011)
  • 7.12.7.5 The sqrt functions (p: 249)
  • 7.25 型総称数学関数 <tgmath.h> (p: 373-375)
  • F.10.4.5 The sqrt functions (p: 525)
  • C99標準 (ISO/IEC 9899:1999)
  • 7.12.7.5 The sqrt functions (p: 229-230)
  • 7.22 型総称数学関数 <tgmath.h> (p: 335-337)
  • F.9.4.5 The sqrt functions (p: 462)
  • C89/C90標準 (ISO/IEC 9899:1990)
  • 4.5.5.2 The sqrt function

[編集] 関連項目

(C99)(C99)
指定されたべき乗の数を計算する (xy)
(関数) [編集]
(C99)(C99)(C99)
立方根を計算する (3x)
(関数) [編集]
(C99)(C99)(C99)
2つの与えられた数の平方の和の平方根を計算する (x2
+y2
)
(関数) [編集]
(C99)(C99)(C99)
複素平方根を計算する
(関数) [編集]
C++ ドキュメント (`sqrt` について)
English 日本語 中文(简体) 中文(繁體)