Namespaces
Variants

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

From cppreference.net
Common mathematical functions
Nearest integer floating point operations
(C++11)
(C++11)
(C++11) (C++11) (C++11)
Floating point manipulation functions
(C++11) (C++11)
(C++11)
(C++11)
Classification and comparison
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Types
(C++11)
(C++11)
(C++11)
Macro constants
Definiert im Header <cmath>
(1)
float sin ( float num ) ;

double sin ( double num ) ;

long double sin ( long double num ) ;
(bis C++23)
/*floating-point-type*/
sin ( /*floating-point-type*/ 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 /*deduced-simd-t*/ < V >

sin ( const V & v_num ) ;
(S) (seit C++26)
Definiert im Header <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 bietet Überladungen von std::sin für alle cv-unqualifizierten Gleitkommatypen als Typ des Parameters. (since C++23)
S) Die SIMD-Überladung führt eine elementweise std::sin -Operation auf v_num durch.
(Siehe math-floating-point und deduced-simd-t für deren Definitionen.)
(seit C++26)
A) Zusätzliche Überladungen werden für alle Ganzzahltypen bereitgestellt, die als double behandelt werden.
(since C++11)

Inhaltsverzeichnis

Parameter

num - Fließkomma- oder Ganzzahlwert, der den Winkel im Bogenmaß darstellt

Rückgabewert

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

Das Ergebnis kann wenig oder keine Bedeutung haben, wenn die Größenordnung von num groß ist.

(until C++11)

Wenn ein Domänenfehler auftritt, wird ein implementierungsdefinierter Wert zurückgegeben (NaN, sofern unterstützt).

Wenn ein Bereichsfehler aufgrund von Unterlauf auftritt, wird das korrekte Ergebnis (nach Rundung) zurückgegeben.

Fehlerbehandlung

Fehler werden gemeldet, wie in math_errhandling spezifiziert.

Wenn die Implementierung IEEE-Gleitkommaarithmetik (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 ausgelöst.
  • wenn das Argument NaN ist, wird NaN zurückgegeben.

Hinweise

Der Fall, in dem das Argument unendlich ist, ist in C (auf das C++ verweist) nicht als Domänenfehler spezifiziert, aber es ist definiert als ein Domänenfehler in POSIX .

POSIX legt ebenfalls fest, dass im Fall eines Unterlaufs num unverändert zurückgegeben wird, und falls 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 wie (A) bereitgestellt werden. Sie müssen lediglich sicherstellen, dass für ihr Argument num vom Ganzzahltyp std :: sin ( num ) die gleiche Wirkung hat wie std :: sin ( static_cast < double > ( num ) ) .

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
              << "Typische Verwendung:\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'
              << "Spezielle Werte:\n"
              << "std::sin(+0) = " << std::sin(0.0) << '\n'
              << "std::sin(-0) = " << std::sin(-0.0) << '\n';
    // Fehlerbehandlung
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout << "std::sin(INFINITY) = " << std::sin(INFINITY) << '\n';
    if (std::fetestexcept(FE_INVALID))
        std::cout << "    FE_INVALID ausgelöst\n";
}

Mögliche Ausgabe:

Typische Verwendung:
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
Spezielle Werte:
std::sin(+0) = +0
std::sin(-0) = -0
std::sin(INFINITY) = -nan
    FE_INVALID ausgelöst

Siehe auch

(C++11) (C++11)
berechnet den Kosinus ( cos(x) )
(Funktion)
(C++11) (C++11)
berechnet den Tangens ( tan(x) )
(Funktion)
(C++11) (C++11)
berechnet den Arkussinus ( arcsin(x) )
(Funktion)
berechnet den Sinus einer komplexen Zahl ( sin(z) )
(Funktions-Template)
wendet die Funktion std::sin auf jedes Element des Valarray an
(Funktions-Template)