std:: copysign, std:: copysignf, std:: copysignl
|
Défini dans l'en-tête
<cmath>
|
||
| (1) | ||
|
float
copysign
(
float
mag,
float
sgn
)
;
double
copysign
(
double
mag,
double
sgn
)
;
|
(jusqu'à C++23) | |
|
constexpr
/*floating-point-type*/
copysign
(
/*floating-point-type*/
mag,
|
(depuis C++23) | |
|
float
copysignf
(
float
mag,
float
sgn
)
;
|
(2) |
(depuis C++11)
(constexpr depuis C++23) |
|
long
double
copysignl
(
long
double
mag,
long
double
sgn
)
;
|
(3) |
(depuis C++11)
(constexpr depuis C++23) |
|
Surcharge SIMD
(depuis C++26)
|
||
|
Défini dans l'en-tête
<simd>
|
||
|
template
<
class
V0,
class
V1
>
constexpr
/*math-common-simd-t*/
<
V0, V1
>
|
(S) | (depuis C++26) |
|
Surcharges supplémentaires
(depuis C++11)
|
||
|
Défini dans l'en-tête
<cmath>
|
||
|
template
<
class
Integer
>
double copysign ( Integer mag, Integer sgn ) ; |
(A) | (constexpr depuis C++23) |
std::copysign
pour tous les types à virgule flottante non qualifiés cv comme type des paramètres.
(depuis C++23)
|
S)
La surcharge SIMD effectue un
std::copysign
élément par élément sur
v_mag
et
v_sgn
.
|
(depuis C++26) |
|
A)
Des surcharges supplémentaires sont fournies pour tous les types entiers, qui sont traités comme
double
.
|
(depuis C++11) |
Table des matières |
Paramètres
| mag, sgn | - | valeurs à virgule flottante ou entières |
Valeur de retour
Si aucune erreur ne se produit, la valeur à virgule flottante avec la magnitude de mag et le signe de sgn est retournée.
Si mag est NaN, alors NaN avec le signe de sgn est retourné.
Si sgn est -0, le résultat est uniquement négatif si l'implémentation prend en charge le zéro signé de manière cohérente dans les opérations arithmétiques.
Gestion des erreurs
Cette fonction n'est sujette à aucune erreur spécifiée dans math_errhandling .
Si l'implémentation prend en charge l'arithmétique à virgule flottante IEEE (IEC 60559),
- La valeur retournée est exacte ( FE_INEXACT n'est jamais déclenchée) et indépendante du mode d'arrondi actuel.
Notes
std::copysign
est le seul moyen portable de manipuler le signe d'une valeur NaN (pour examiner le signe d'un NaN,
std::signbit
peut également être utilisé).
Les surcharges supplémentaires ne sont pas tenues d'être fournies exactement comme (A) . Elles doivent seulement être suffisantes pour garantir que pour leur premier argument num1 et second argument num2 :
|
(jusqu'à C++23) |
|
Si
num1
et
num2
ont des types arithmétiques, alors
std
::
copysign
(
num1, num2
)
a le même effet que
std
::
copysign
(
static_cast
<
/*common-floating-point-type*/
>
(
num1
)
,
Si aucun tel type à virgule flottante avec le plus grand rang et la plus grande sous-catégorie n'existe, alors la résolution de surcharge ne résulte pas en un candidat utilisable parmi les surcharges fournies. |
(depuis C++23) |
Exemple
#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'; }
Sortie :
copysign(1.0,+2.0) = +1 copysign(1.0,-2.0) = -1 copysign(inf,-2.0) = -inf copysign(NaN,-2.0) = -nan
Voir aussi
|
(C++11)
(C++11)
|
valeur absolue d'une valeur à virgule flottante (
|x|
)
(fonction) |
|
(C++11)
|
vérifie si le nombre donné est négatif
(fonction) |
|
documentation C
pour
copysign
|
|