Namespaces
Variants

Mathematical constants

From cppreference.net

Table des matières

Constantes (depuis C++20)

Défini dans l'en-tête <numbers>
Défini dans l'espace de noms std::numbers
e_v
la constante mathématique e
(gabarit de variable)
log2e_v
log 2 e
(modèle de variable)
log10e_v
log 10 e
(modèle de variable)
pi_v
la constante mathématique π
(modèle de variable)
inv_pi_v
1
π

(modèle de variable)
inv_sqrtpi_v
1
π

(gabarit de variable)
ln2_v
ln 2
(modèle de variable)
ln10_v
ln 10
(modèle de variable)
sqrt2_v
2
(modèle de variable)
sqrt3_v
3
(modèle de variable)
inv_sqrt3_v
1
3

(modèle de variable)
egamma_v
la constante d'Euler–Mascheroni γ
(modèle de variable)
phi_v
le nombre d'or Φ (
1 + 5
2
)
(modèle de variable)
inline constexpr double e
e_v < double >
(constante)
inline constexpr double log2e
log2e_v < double >
(constante)
inline constexpr double log10e
log10e_v < double >
(constante)
inline constexpr double pi
pi_v < double >
(constante)
inline constexpr double inv_pi
inv_pi_v < double >
(constante)
inline constexpr double inv_sqrtpi
inv_sqrtpi_v < double >
(constante)
inline constexpr double ln2
ln2_v < double >
(constante)
inline constexpr double ln10
ln10_v < double >
(constante)
inline constexpr double sqrt2
sqrt2_v < double >
(constante)
inline constexpr double sqrt3
sqrt3_v < double >
(constante)
inline constexpr double inv_sqrt3
inv_sqrt3_v < double >
(constante)
inline constexpr double egamma
egamma_v < double >
(constante)
inline constexpr double phi
phi_v < double >
(constante)

Notes

Un programme qui instancie un modèle primaire d'un modèle de variable de constante mathématique est non conforme.

La bibliothèque standard spécialise les modèles de variables de constantes mathématiques pour tous les types à virgule flottante (c'est-à-dire float , double , long double , et les types à virgule flottante de largeur fixe (depuis C++23) ).

Un programme peut spécialiser partiellement ou explicitement un modèle de variable de constante mathématique à condition que la spécialisation dépende d'un type défini par le programme .

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_math_constants 201907L (C++20) Constantes mathématiques

Exemple

#include <cmath>
#include <iomanip>
#include <iostream>
#include <limits>
#include <numbers>
#include <string_view>
auto egamma_aprox(const unsigned iterations)
{
    long double s{};
    for (unsigned m{2}; m != iterations; ++m)
        if (const long double t{std::riemann_zetal(m) / m}; m % 2)
            s -= t;
        else
            s += t;
    return s;
};
int main()
{
    using namespace std::numbers;
    using namespace std::string_view_literals;
    const auto x = std::sqrt(inv_pi) / inv_sqrtpi +
        std::ceil(std::exp2(log2e)) + sqrt3 * inv_sqrt3 + std::exp(0);
    const auto v = (phi * phi - phi) + 1 / std::log2(sqrt2) +
        log10e * ln10 + std::pow(e, ln2) - std::cos(pi);    
    std::cout << "La réponse est " << x * v << '\n';
    constexpr auto γ{"0.577215664901532860606512090082402"sv};
    std::cout
        << "γ comme 10⁶ sommes de ±ζ(m)/m   = "
        << egamma_aprox(1'000'000) << '\n'
        << "γ comme egamma_v<float>       = "
        << std::setprecision(std::numeric_limits<float>::digits10 + 1)
        << egamma_v<float> << '\n'
        << "γ comme egamma_v<double>      = "
        << std::setprecision(std::numeric_limits<double>::digits10 + 1)
        << egamma_v<double> << '\n'
        << "γ comme egamma_v<long double> = "
        << std::setprecision(std::numeric_limits<long double>::digits10 + 1)
        << egamma_v<long double> << '\n'
        << "γ avec " << γ.length() - 1 << " chiffres de précision = " << γ << '\n';
}

Sortie possible :

La réponse est 42
γ comme 10⁶ sommes de ±ζ(m)/m   = 0.577215
γ comme egamma_v<float>       = 0.5772157
γ comme egamma_v<double>      = 0.5772156649015329
γ comme egamma_v<long double> = 0.5772156649015328606
γ avec 34 chiffres de précision = 0.577215664901532860606512090082402

Voir aussi

(C++11)
représente une fraction rationnelle exacte
(modèle de classe)