Namespaces
Variants

std:: expm1, std:: expm1f, std:: expm1l

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
Défini dans l'en-tête <cmath>
(1)
float expm1 ( float num ) ;

double expm1 ( double num ) ;

long double expm1 ( long 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 >

expm1 ( const V & v_num ) ;
(S) (depuis C++26)
Défini dans l'en-tête <cmath>
template < class Integer >
double expm1 ( Integer num ) ;
(A) (constexpr depuis C++26)
1-3) Calcule e ( le nombre d'Euler , 2.7182818 ... ) élevé à la puissance donnée num , moins 1.0 . Cette fonction est plus précise que l'expression std:: exp ( num ) - 1.0 si num est proche de zéro. La bibliothèque fournit des surcharges de 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 .
(Voir math-floating-point et deduced-simd-t pour leurs définitions.)
(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)