sqrt, sqrtf, sqrtl
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
定義先ヘッダ
<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以降) |
sqrtl
が呼び出される。それ以外の場合、
arg
が整数型または
double
型の場合、
sqrt
が呼び出される。それ以外の場合、
sqrtf
が呼び出される。
arg
が複素数型または虚数型の場合、マクロは対応する複素数関数(
csqrtf
、
csqrt
、
csqrtl
)を呼び出す。
目次 |
パラメータ
| arg | - | 浮動小数点値 |
戻り値
エラーが発生しない場合、 arg の平方根( \({\small \sqrt{arg} }\) √ arg )が返されます。
定義域エラーが発生した場合、実装定義の値が返されます(NaNがサポートされている場合はNaN)。
アンダーフローによる範囲エラーが発生した場合、正しい結果(丸め後)が返されます。
エラーハンドリング
エラーは
math_errhandling
で指定された通りに報告されます。
ドメインエラーは、 arg がゼロ未満の場合に発生します。
IEEE浮動小数点演算(IEC 60559)を実装がサポートしている場合、
- 引数が -0 より小さい場合、 FE_INVALID が発生し、NaN が返されます。
- 引数が +∞ または ±0 の場合、変更されずに返されます。
- 引数が NaN の場合、NaN が返されます。
注記
sqrt
はIEEE標準により、無限精度の結果から正しく丸められることが要求されています。特に、浮動小数点型で表現可能な場合は正確な結果が生成されます。これを要求される他の演算は、
算術演算子
と関数
fma
のみです。
pow
を含む他の関数は、この制約を受けません。
例
#include <errno.h> #include <fenv.h> #include <math.h> #include <stdio.h> // #pragma STDC FENV_ACCESS ON int main(void) { // 通常の使用 printf("sqrt(100) = %f\n", sqrt(100)); printf("sqrt(2) = %f\n", sqrt(2)); printf("golden ratio = %f\n", (1 + sqrt(5)) / 2); // 特殊な値 printf("sqrt(-0) = %f\n", sqrt(-0.0)); // エラー処理 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 sqrt関数群 (p: TBD)
-
- 7.25 総称型数学 <tgmath.h> (p: TBD)
-
- F.10.4.5 sqrt関数群 (p: TBD)
- C17規格 (ISO/IEC 9899:2018):
-
- 7.12.7.5 sqrt関数群 (p: TBD)
-
- 7.25 総称数学 <tgmath.h> (p: TBD)
-
- F.10.4.5 sqrt関数群 (p: TBD)
- C11規格 (ISO/IEC 9899:2011):
-
- 7.12.7.5 sqrt関数群 (p: 249)
-
- 7.25 総称数学 <tgmath.h> (p: 373-375)
-
- F.10.4.5 sqrt関数群 (p: 525)
- C99規格 (ISO/IEC 9899:1999):
-
- 7.12.7.5 sqrt関数群 (p: 229-230)
-
- 7.22 総称数学 <tgmath.h> (p: 335-337)
-
- F.9.4.5 sqrt関数群 (p: 462)
- C89/C90標準 (ISO/IEC 9899:1990):
-
- 4.5.5.2 sqrt関数
関連項目
|
(C99)
(C99)
|
指定された累乗を計算する (
\(\small{x^y}\)
x
y
)
(関数) |
|
(C99)
(C99)
(C99)
|
立方根を計算する (
\(\small{\sqrt[3]{x} }\)
3
√
x
)
(関数) |
|
(C99)
(C99)
(C99)
|
2つの数値の二乗和の平方根を計算する (
\(\scriptsize{\sqrt{x^2+y^2} }\)
√
x
2
+y 2 ) (関数) |
|
(C99)
(C99)
(C99)
|
複素数の平方根を計算する
(関数) |
|
C++ documentation
for
sqrt
|
|