std:: expm1, std:: expm1f, std:: expm1l
|
Défini dans l'en-tête
<cmath>
|
||
| (1) | ||
|
float
expm1
(
float
num
)
;
double
expm1
(
double
num
)
;
|
(jusqu'à C++23) | |
|
/*floating-point-type*/
expm1 ( /*floating-point-type*/ num ) ; |
(depuis C++23)
(constexpr depuis C++26) |
|
|
float
expm1f
(
float
num
)
;
|
(2) |
(depuis C++11)
(constexpr depuis C++26) |
|
long
double
expm1l
(
long
double
num
)
;
|
(3) |
(depuis C++11)
(constexpr depuis C++26) |
|
Surcharge SIMD
(depuis C++26)
|
||
|
Défini dans l'en-tête
<simd>
|
||
|
template
<
/*math-floating-point*/
V
>
constexpr
/*deduced-simd-t*/
<
V
>
|
(S) | (depuis C++26) |
|
Surcharges supplémentaires
(depuis C++11)
|
||
|
Défini dans l'en-tête
<cmath>
|
||
|
template
<
class
Integer
>
double expm1 ( Integer num ) ; |
(A) | (constexpr depuis C++26) |
std::expm1
pour tous les types à virgule flottante non qualifiés cv comme type du paramètre.
(depuis C++23)
|
S)
La surcharge SIMD effectue un calcul
std::expm1
élément par élément sur
v_num
.
|
(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
| num | - | valeur à virgule flottante ou entière |
Valeur de retour
Si aucune erreur ne se produit
e
num
-1
est retourné.
Si une erreur de plage due à un dépassement de capacité se produit,
+HUGE_VAL
,
+HUGE_VALF
, ou
+HUGE_VALL
est renvoyé.
Si une erreur de plage se produit en raison d'un dépassement inférieur, le résultat correct (après arrondi) est retourné.
Gestion des erreurs
Les erreurs sont signalées comme spécifié dans math_errhandling .
Si l'implémentation prend en charge l'arithmétique à virgule flottante IEEE (IEC 60559),
- Si l'argument est ±0, il est retourné, non modifié.
- Si l'argument est -∞, -1 est retourné.
- Si l'argument est +∞, +∞ est retourné.
- Si l'argument est NaN, NaN est retourné.
Notes
Les fonctions
std::expm1
et
std::log1p
sont utiles pour les calculs financiers, par exemple, lors du calcul de petits taux d'intérêt quotidiens :
(1+x)
n
-1
peut être exprimé comme
std
::
expm1
(
n
*
std::
log1p
(
x
)
)
. Ces fonctions simplifient également l'écriture précise des fonctions hyperboliques inverses.
Pour le type compatible IEEE double , un dépassement de capacité est garanti si 709.8 < num .
Les surcharges supplémentaires ne sont pas requises d'être fournies exactement comme (A) . Elles doivent seulement être suffisantes pour garantir que pour leur argument num de type entier, std :: expm1 ( num ) ait le même effet que std :: expm1 ( static_cast < double > ( num ) ) .
Exemple
#include <cerrno> #include <cfenv> #include <cmath> #include <cstring> #include <iostream> // #pragma STDC FENV_ACCESS ON int main() { std::cout << "expm1(1) = " << std::expm1(1) << '\n' << "Intérêts gagnés en 2 jours sur 100$, composés quotidiennement à 1%\n" << " sur un calendrier 30/360 = " << 100 * std::expm1(2 * std::log1p(0.01 / 360)) << '\n' << "exp(1e-16)-1 = " << std::exp(1e-16) - 1 << ", mais expm1(1e-16) = " << std::expm1(1e-16) << '\n'; // valeurs spéciales std::cout << "expm1(-0) = " << std::expm1(-0.0) << '\n' << "expm1(-Inf) = " << std::expm1(-INFINITY) << '\n'; // gestion des erreurs errno = 0; std::feclearexcept(FE_ALL_EXCEPT); std::cout << "expm1(710) = " << std::expm1(710) << '\n'; if (errno == ERANGE) std::cout << " errno == ERANGE: " << std::strerror(errno) << '\n'; if (std::fetestexcept(FE_OVERFLOW)) std::cout << " FE_OVERFLOW déclenchée\n"; }
Sortie possible :
expm1(1) = 1.71828
Intérêts gagnés en 2 jours sur 100$, composés quotidiennement à 1%
sur un calendrier 30/360 = 0.00555563
exp(1e-16)-1 = 0, mais expm1(1e-16) = 1e-16
expm1(-0) = -0
expm1(-Inf) = -1
expm1(710) = inf
errno == ERANGE: Résultat trop grand
FE_OVERFLOW déclenchée
Voir aussi
|
(C++11)
(C++11)
|
retourne
e
élevé à la puissance donnée (
e
x
)
(fonction) |
|
(C++11)
(C++11)
(C++11)
|
retourne
2
élevé à la puissance donnée (
2
x
)
(fonction) |
|
(C++11)
(C++11)
(C++11)
|
logarithme naturel (en base
e
) de
1
plus le nombre donné (
ln(1+x)
)
(fonction) |
|
Documentation C
pour
expm1
|
|