Namensräume
Varianten
Aktionen

std::sin, std::sinf, std::sinl

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

double      sin ( double num );

long double sin ( long double num );
(bis C++23)
/* Gleitkommazahl-Typ */
            sin ( /*Gleitkommazahltyp*/ num );
(seit C++23)
(constexpr seit C++26)
float       sinf( float num );
(2) (seit C++11)
(constexpr seit C++26)
long double sinl( 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>

            sin ( const V& v_num );
(S) (seit C++26)
Definiert in der Header-Datei <cmath>
template< class Integer >
double      sin ( Integer num );
(A) (constexpr seit C++26)
1-3) Berechnet den Sinus von num (gemessen in Radiant). Die Bibliothek stellt Überladungen von std::sin für alle cv-unqualifizierten Gleitkommatypen als Parametertyp bereit.(seit C++23)
S) Die SIMD-Überladung führt eine elementweise std::sin auf v_num durch.
(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

[edit] Parameter

num - Gleitkomma- oder Ganzzahlwert, der den Winkel in Radiant darstellt

[edit] Rückgabewert

Wenn keine Fehler auftreten, wird der Sinus von num (sin(num)) im Bereich [-1+1] zurückgegeben.

Das Ergebnis hat möglicherweise wenig oder keine Bedeutung, wenn die Magnitude von num groß ist.

(bis C++11)

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.

[edit] Fehlerbehandlung

Fehler werden wie in math_errhandling beschrieben gemeldet.

Wenn die Implementierung IEEE-Gleitkomma-Arithmetik (IEC 60559) unterstützt,

  • Wenn das Argument ±0 ist, wird es unverändert zurückgegeben.
  • Wenn das Argument ±∞ ist, wird NaN zurückgegeben und FE_INVALID wird ausgelöst.
  • Wenn das Argument NaN ist, wird NaN zurückgegeben.

[edit] Hinweise

Der Fall, dass das Argument unendlich ist, wird in C (dem C++ folgt) nicht als Domänenfehler spezifiziert, aber er ist als Domänenfehler in POSIX definiert.

POSIX gibt außerdem an, dass bei einem Underflow num unverändert zurückgegeben wird und wenn dies nicht unterstützt wird, ein implementierungsdefinierter Wert zurückgegeben wird, der nicht größer als DBL_MIN, FLT_MIN und LDBL_MIN ist.

Die zusätzlichen Überladungen müssen nicht exakt als (A) bereitgestellt werden. Sie müssen nur ausreichend sein, um sicherzustellen, dass für ihr Argument num vom Ganzzahltyp std::sin(num) dieselbe Wirkung hat wie std::sin(static_cast<double>(num)).

[edit] Beispiel

#include <cerrno>
#include <cfenv>
#include <cmath>
#include <iomanip>
#include <iostream>
 
// #pragma STDC FENV_ACCESS ON
 
const double pi = std::acos(-1); // or std::numbers::pi since C++20
 
constexpr double your_sin(double x)
{
    double sin{0}, pow{x};
    for (auto fac{1LLU}, n{1ULL}; n != 20; fac *= ++n, pow *= x)
        if (n & 1)
            sin += (n & 2 ? -pow : pow) / fac;
    return sin;
}
 
int main()
{
    std::cout << std::setprecision(10) << std::showpos
              << "Typical usage:\n"
              << "std::sin(pi/6) = " << std::sin(pi / 6) << '\n'
              << "your sin(pi/6) = " << your_sin(pi / 6) << '\n'
              << "std::sin(pi/2) = " << std::sin(pi / 2) << '\n'
              << "your sin(pi/2) = " << your_sin(pi / 2) << '\n'
              << "std::sin(-3*pi/4) = " << std::sin(-3 * pi / 4) << '\n'
              << "your sin(-3*pi/4) = " << your_sin(-3 * pi / 4) << '\n'
              << "Special values:\n"
              << "std::sin(+0) = " << std::sin(0.0) << '\n'
              << "std::sin(-0) = " << std::sin(-0.0) << '\n';
 
    // error handling
    std::feclearexcept(FE_ALL_EXCEPT);
 
    std::cout << "std::sin(INFINITY) = " << std::sin(INFINITY) << '\n';
    if (std::fetestexcept(FE_INVALID))
        std::cout << "    FE_INVALID raised\n";
}

Mögliche Ausgabe

Typical usage:
std::sin(pi/6) = +0.5
your sin(pi/6) = +0.5
std::sin(pi/2) = +1
your sin(pi/2) = +1
std::sin(-3*pi/4) = -0.7071067812
your sin(-3*pi/4) = -0.7071067812
Special values:
std::sin(+0) = +0
std::sin(-0) = -0
std::sin(INFINITY) = -nan
    FE_INVALID raised

[edit] Siehe auch

(C++11)(C++11)
berechnet Kosinus (cos(x))
(Funktion) [bearbeiten]
(C++11)(C++11)
berechnet Tangens (tan(x))
(Funktion) [bearbeiten]
(C++11)(C++11)
berechnet Arkussinus (arcsin(x))
(Funktion) [bearbeiten]
berechnet den Sinus einer komplexen Zahl (sin(z))
(function template) [edit]
Wendet die Funktion std::sin auf jedes Element von valarray an
(function template) [edit]