std::copysign, std::copysignf, std::copysignl
| Definiert in der Header-Datei <cmath> |
||
| (1) | ||
float copysign ( float mag, float sgn ); double copysign ( double mag, double sgn ); |
(bis C++23) | |
| constexpr /*Gleitkommazahl-Typ*/ copysign ( /*Gleitkommatyp*/ mag, |
(seit C++23) | |
float copysignf( float mag, float sgn ); |
(2) | (seit C++11) (constexpr seit C++23) |
long double copysignl( long double mag, long double sgn ); |
(3) | (seit C++11) (constexpr seit C++23) |
| SIMD-Überladung (seit C++26) |
||
| Definiert im Header <simd> |
||
| template< class V0, class V1 > constexpr /*math-common-simd-t*/<V0, V1> |
(S) | (seit C++26) |
| Zusätzliche Überladungen (seit C++11) |
||
| Definiert in der Header-Datei <cmath> |
||
template< class Integer > double copysign ( Integer mag, Integer sgn ); |
(A) | (constexpr seit C++23) |
std::copysign für alle cv-unqualifizierten Gleitkommatypen als Parametertypen bereit.(seit C++23)|
S) Die SIMD-Überladung führt ein elementweises
std::copysign auf v_mag und v_sgn durch.
|
(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
| mag, sgn | - | Gleitkomma- oder Ganzzahlwerte |
[edit] Rückgabewert
Wenn keine Fehler auftreten, wird der Gleitkommawert mit dem Betrag von mag und dem Vorzeichen von sgn zurückgegeben.
Wenn mag NaN ist, wird NaN mit dem Vorzeichen von sgn zurückgegeben.
Wenn sgn -0 ist, ist das Ergebnis nur dann negativ, wenn die Implementierung das vorzeichenbehaftete Null konsistent in arithmetischen Operationen unterstützt.
[edit] Fehlerbehandlung
Diese Funktion unterliegt keinen Fehlern, die in math_errhandling spezifiziert sind.
Wenn die Implementierung IEEE-Gleitkomma-Arithmetik (IEC 60559) unterstützt,
- Der zurückgegebene Wert ist exakt (FE_INEXACT wird nie ausgelöst) und unabhängig von der aktuellen Rundungsmodus.
[edit] Anmerkungen
std::copysign ist der einzige portable Weg, das Vorzeichen eines NaN-Wertes zu manipulieren (um das Vorzeichen eines NaN zu untersuchen, kann auch std::signbit verwendet werden).
Die zusätzlichen Überladungen müssen nicht exakt wie (A) angegeben werden. Sie müssen nur ausreichen, um sicherzustellen, dass für ihr erstes Argument num1 und ihr zweites Argument num2
|
(bis C++23) |
|
Wenn num1 und num2 arithmetische Typen haben, dann hat std::copysign(num1, num2) die gleiche Wirkung wie std::copysign(static_cast</*gemeinsamer Gleitkommatyp*/>(num1), Wenn kein solcher Gleitkommazahltyp mit dem höchsten Rang und Subrang existiert, dann führt die Überladungsauflösung nicht zu einem nutzbaren Kandidaten aus den bereitgestellten Überladungen. |
(seit C++23) |
[edit] Beispiel
#include <cmath> #include <iostream> int main() { std::cout << std::showpos << "copysign(1.0,+2.0) = " << std::copysign(1.0, +2.0) << '\n' << "copysign(1.0,-2.0) = " << std::copysign(1.0, -2.0) << '\n' << "copysign(inf,-2.0) = " << std::copysign(INFINITY, -2.0) << '\n' << "copysign(NaN,-2.0) = " << std::copysign(NAN, -2.0) << '\n'; }
Ausgabe
copysign(1.0,+2.0) = +1 copysign(1.0,-2.0) = -1 copysign(inf,-2.0) = -inf copysign(NaN,-2.0) = -nan
[edit] Siehe auch
| (C++11)(C++11) |
Absolutwert eines Gleitkommawerts (|x|) (Funktion) |
| (C++11) |
prüft, ob die gegebene Zahl negativ ist (Funktion) |
| C-Dokumentation für copysign
| |