名前空間
変種
操作

sqrt, sqrtf, sqrtl

提供: cppreference.com
< c‎ | numeric‎ | math
 
 
 
一般的な数学関数
関数
基本操作
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)(C99)(C99)
指数関数
(C99)
(C99)
(C99)
(C99)
冪関数
sqrt
(C99)
(C99)
三角関数と双曲線関数
(C99)
(C99)
(C99)
誤差関数とガンマ関数
(C99)
(C99)
(C99)
(C99)
最も近い整数
(C99)(C99)(C99)
(C99)
(C99)(C99)(C99)
浮動小数点操作関数
(C99)(C99)
(C99)
(C99)
分類
(C99)
(C99)
(C99)
(C99)(C99)
マクロ定数
 
ヘッダ <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) 型総称マクロ。 arglong double の場合は sqrtl が呼ばれます。 そうでなく、 arg が整数型または double 型の場合は sqrt が呼ばれます。 そうでなければ sqrtf が呼ばれます。 arg が複素数または虚数の場合、マクロは対応する複素数の関数 (csqrtf, csqrt, csqrtl) を呼びます。

目次

[編集] 引数

arg - 浮動小数点値

[編集] 戻り値

エラーが発生なければ、 arg の平方根 (arg) が返されます。

定義域エラーが発生した場合、処理系定義の値 (サポートされていれば NaN) が返されます。

アンダーフローによる値域エラーが発生した場合、 (丸めた後の) 正しい結果が返されます。

[編集] エラー処理

math_errhandling で規定されている通りにエラーが報告されます。

arg がゼロより小さい場合、定義域エラーが発生します。

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

  • 引数が -0 より小さければ、 FE_INVALID が発生し、 NaN が返されます。
  • 引数が +∞ または ±0 であれば、それが変更されずに返されます。
  • 引数が NaN であれば、 NaN が返されます。

[編集] ノート

sqrt は IEEE 標準によって正確であることが要求されています。 他に正確であることが要求されている演算は、算術演算子と関数 fma だけです。 戻り値型に (デフォルトの丸めモードを使用して) 丸めた後、 sqrt の結果は無限に正確な結果から区別できません。 別の言い方をすると、誤差は 0.5 ulp 未満です。 他の関数 (pow など) には、そのような制約はありません。

[編集]

#include <stdio.h>
#include <math.h>
#include <errno.h>
#include <fenv.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

[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 7.12.7.5 The sqrt functions (p: 249)
  • 7.25 Type-generic math <tgmath.h> (p: 373-375)
  • F.10.4.5 The sqrt functions (p: 525)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.12.7.5 The sqrt functions (p: 229-230)
  • 7.22 Type-generic math <tgmath.h> (p: 335-337)
  • F.9.4.5 The sqrt functions (p: 462)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.5.5.2 The sqrt function

[編集] 関連項目

(C99)(C99)
xy 乗 (xy) を計算します
(関数) [edit]
(C99)(C99)(C99)
立方根 (3x) を計算します
(関数) [edit]
(C99)(C99)(C99)
2つの値の二乗和の平方根 (x2
+y2
) を計算します
(関数) [edit]
(C99)(C99)(C99)
複素数の平方根を計算します
(関数) [edit]