Namensräume
Varianten
Aktionen

std::sqrt, std::sqrtf, std::sqrtl

Von cppreference.com
< cpp‎ | numeric‎ | math
 
 
 
 
Definiert in der Header-Datei <cmath>
(1)
float       sqrt ( float num );

double      sqrt ( double num );

long double sqrt ( long 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>

            sqrt ( const V& v_num );
(S) (seit C++26)
Definiert in der Header-Datei <cmath>
template< class Integer >
double      sqrt ( Integer num );
(A) (constexpr seit C++26)
1-3) Berechnet die Quadratwurzel von num. Die Bibliothek stellt Überladungen von 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.
(Siehe math-floating-point und deduced-simd-t für ihre Definitionen.)
(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) [bearbeiten]
(C++11)(C++11)(C++11)
berechnet die Kubikwurzel (3x)
(Funktion) [bearbeiten]
(C++11)(C++11)(C++11)
berechnet die Hypotenuse x2
+y2
und x2
+y2
+z2
(seit C++17)

(Funktion) [bearbeiten]
komplexe Quadratwurzel im Bereich der rechten Halbebene
(function template) [edit]
wendet die Funktion std::sqrt auf jedes Element von valarray an
(function template) [edit]
C-Dokumentation für sqrt