std::sqrt, std::sqrtf, std::sqrtl
From cppreference.com
| ヘッダー <cmath> で定義 |
||
| (1) | ||
float sqrt ( float num ); double sqrt ( double num ); |
(C++23まで) | |
| /*浮動小数点数型*/ sqrt ( /*浮動小数点型*/ num ); |
(C++23から) (C++26 以降 constexpr) |
|
float sqrtf( float num ); |
(2) | (C++11以降) (C++26 以降 constexpr) |
long double sqrtl( long double num ); |
(3) | (C++11以降) (C++26 以降 constexpr) |
| SIMDオーバーロード (C++26以降) |
||
| ヘッダー <simd> で定義 |
||
| template< /*math-floating-point*/ V > constexpr /*deduced-simd-t*/<V> |
(S) | (C++26以降) |
| 追加のオーバーロード (C++11以降) |
||
| ヘッダー <cmath> で定義 |
||
template< class Integer > double sqrt ( Integer num ); |
(A) | (C++26 以降 constexpr) |
1-3) num の平方根を計算します。ライブラリは、パラメータの型として、すべての cv 修飾されていない浮動小数点型に対する
std::sqrt のオーバーロードを提供します。(since C++23)|
S) SIMD オーバーロードは、v_num に対して要素ごとの
std::sqrt を実行します。
|
(C++26以降) |
|
A) すべての整数型に対する追加のオーバーロードが提供されます。これらは double として扱われます。
|
(C++11以降) |
目次 |
[編集] パラメータ
| num | - | 浮動小数点数または整数値 |
[編集] 戻り値
エラーが発生しなかった場合、num の平方根(√num)が返されます。
領域エラーが発生した場合、実装定義の値が返される (サポートされている場合はNaN)。
アンダーフローによる範囲エラーが発生した場合、正確な結果 (丸め後) が返される。
[編集] エラー処理
エラーは math_errhandling で指定された通りに報告される。
Domain error occurs if num is less than zero.
実装がIEEE浮動小数点算術 (IEC 60559) をサポートしている場合、
- -0 未満の引数が与えられた場合、FE_INVALID が発生し、NaN が返されます。
- 引数が +∞ または ±0 の場合、変更されずにそのまま返されます。
- 引数が NaN の場合、NaN が返されます。
[編集] 注記
std::sqrt は、IEEE 標準によって無限に正確な結果から正しく丸められることが要求されます。特に、平方根が浮動小数点型で表現できる場合、正確な結果が生成されます。この要件を満たす他の操作は、算術演算子と関数 std::fma のみです。std::pow を含む他の関数は、この制約を受けません。
追加のオーバーロードは、(A) とまったく同じように提供される必要はありません。整数型の引数 num に対して、std::sqrt(num) が std::sqrt(static_cast<double>(num)) と同じ効果を持つことを保証するのに十分なものであればよいです。
[編集] 例
このコードを実行
#include <cerrno> #include <cfenv> #include <cmath> #include <cstring> #include <iostream> // #pragma STDC FENV_ACCESS ON int main() { // normal use std::cout << "sqrt(100) = " << std::sqrt(100) << '\n' << "sqrt(2) = " << std::sqrt(2) << '\n' << "golden ratio = " << (1 + std::sqrt(5)) / 2 << '\n'; // special values std::cout << "sqrt(-0) = " << std::sqrt(-0.0) << '\n'; // error handling errno = 0; std::feclearexcept(FE_ALL_EXCEPT); std::cout << "sqrt(-1.0) = " << std::sqrt(-1) << '\n'; if (errno == EDOM) std::cout << " errno = EDOM " << std::strerror(errno) << '\n'; if (std::fetestexcept(FE_INVALID)) std::cout << " FE_INVALID raised\n"; }
実行結果の例
sqrt(100) = 10
sqrt(2) = 1.41421
golden ratio = 1.61803
sqrt(-0) = -0
sqrt(-1.0) = -nan
errno = EDOM Numerical argument out of domain
FE_INVALID raised[編集] 関連項目
| (C++11)(C++11) |
数値を指定されたべき乗に累乗する (xy) (関数) |
| (C++11)(C++11)(C++11) |
立方根を計算する (3√x) (関数) |
| (C++11)(C++11)(C++11) |
斜辺 √x2 +y2 を計算する および √x2 +y2 +z2 (C++17 から) (関数) |
| 複素数の平方根、右半平面の範囲 (関数テンプレート) | |
| valarray の各要素に関数 std::sqrt を適用します。 (function template) | |
| C のドキュメント (sqrt)
| |