std:: sin, std:: sinf, std:: sinl
|
Definiert im Header
<cmath>
|
||
| (1) | ||
|
float
sin
(
float
num
)
;
double
sin
(
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
>
|
(S) | (seit C++26) |
|
Zusätzliche Überladungen
(seit C++11)
|
||
|
Definiert im Header
<cmath>
|
||
|
template
<
class
Integer
>
double sin ( Integer num ) ; |
(A) | (constexpr seit C++26) |
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.
|
(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) |
|
|
C-Dokumentation
für
sin
|
|