std::sqrt, std::sqrtf, std::sqrtl
| Definiert in der Header-Datei <cmath> |
||
| (1) | ||
float sqrt ( float num ); double sqrt ( double num ); |
(bis C++23) | |
| /* Gleitkommazahl-Typ */ sqrt ( /*Gleitkommazahl-Typ*/ num ); |
(seit C++23) (constexpr seit C++26) |
|
float sqrtf( float num ); |
(2) | (seit C++11) (constexpr seit C++26) |
long double sqrtl( long double num ); |
(3) | (seit C++11) (constexpr seit C++26) |
| SIMD-Überladung (seit C++26) |
||
| Definiert im Header <simd> |
||
| template< /*math-floating-point*/ V > constexpr /*deduzierter-simd-t*/<V> |
(S) | (seit C++26) |
| Zusätzliche Überladungen (seit C++11) |
||
| Definiert in der Header-Datei <cmath> |
||
template< class Integer > double sqrt ( Integer num ); |
(A) | (constexpr seit C++26) |
std::sqrt für alle cv-unqualifizierten Gleitkommatypen als Parametertyp bereit.(seit C++23)|
S) Die SIMD-Überladung führt ein elementweises
std::sqrt auf v_num aus.
|
(seit C++26) |
|
A) Zusätzliche Überladungen werden für alle ganzzahligen Typen bereitgestellt, die als double behandelt werden.
|
(seit C++11) |
Inhalt |
[bearbeiten] Parameter
| num | - | Gleitkomma- oder Ganzzahlwert |
[bearbeiten] Rückgabewert
Wenn keine Fehler auftreten, wird die Quadratwurzel von num (√num) zurückgegeben.
Wenn ein Domänenfehler auftritt, wird ein implementierungsabhängiger Wert zurückgegeben (NaN, wo unterstützt).
Wenn ein Bereichsfehler aufgrund eines Unterlaufs auftritt, wird das korrekte Ergebnis (nach Rundung) zurückgegeben.
[bearbeiten] Fehlerbehandlung
Fehler werden wie in math_errhandling beschrieben gemeldet.
Ein Domänenfehler tritt auf, wenn num kleiner als Null ist.
Wenn die Implementierung IEEE-Gleitkomma-Arithmetik (IEC 60559) unterstützt,
- Wenn das Argument kleiner als -0 ist, wird FE_INVALID ausgelöst und NaN zurückgegeben.
- Wenn das Argument +∞ oder ±0 ist, wird es unverändert zurückgegeben.
- Wenn das Argument NaN ist, wird NaN zurückgegeben.
[bearbeiten] Hinweise
std::sqrt muss gemäß dem IEEE-Standard korrekt auf den unendlich präzisen Wert gerundet werden. Insbesondere wird das exakte Ergebnis geliefert, wenn es im Gleitkommatyp dargestellt werden kann. Die einzigen anderen Operationen, die dies erfordern, sind die arithmetischen Operatoren und die Funktion std::fma. Andere Funktionen, einschließlich std::pow, sind nicht so eingeschränkt.
Die zusätzlichen Überladungen müssen nicht exakt wie (A) bereitgestellt werden. Sie müssen nur ausreichen, um sicherzustellen, dass für ihr Argument num vom ganzzahligen Typ std::sqrt(num) die gleiche Wirkung hat wie std::sqrt(static_cast<double>(num)).
[bearbeiten] Beispiel
#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"; }
Mögliche Ausgabe
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[bearbeiten] Siehe auch
| (C++11)(C++11) |
erhöht eine Zahl zur gegebenen Potenz (xy) (Funktion) |
| (C++11)(C++11)(C++11) |
berechnet die Kubikwurzel (3√x) (Funktion) |
| (C++11)(C++11)(C++11) |
berechnet die Hypotenuse √x2 +y2 und √x2 +y2 +z2 (seit C++17) (Funktion) |
| komplexe Quadratwurzel im Bereich der rechten Halbebene (function template) | |
| wendet die Funktion std::sqrt auf jedes Element von valarray an (function template) | |
| C-Dokumentation für sqrt
| |