Namespaces
Variants

Mathematical constants

From cppreference.net

Contenidos

Constantes (desde C++20)

Definido en el encabezado <numbers>
Definido en el espacio de nombres std::numbers
e_v
la constante matemática e
(plantilla de variable)
log2e_v
log 2 e
(plantilla de variable)
log10e_v
log 10 e
(plantilla de variable)
pi_v
la constante matemática π
(plantilla de variable)
inv_pi_v
1
π

(plantilla de variable)
inv_sqrtpi_v
1
π

(plantilla de variable)
ln2_v
ln 2
(plantilla de variable)
ln10_v
ln 10
(plantilla de variable)
sqrt2_v
2
(plantilla de variable)
sqrt3_v
3
(plantilla de variable)
inv_sqrt3_v
1
3

(plantilla de variable)
egamma_v
la constante de Euler-Mascheroni γ
(plantilla de variable)
phi_v
la proporción áurea Φ (
1 + 5
2
)
(plantilla 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)

Notas

Un programa que crea una instancia de una plantilla primaria de una plantilla de variable de constante matemática está mal formado.

La biblioteca estándar especializa plantillas de variables de constantes matemáticas para todos los tipos de punto flotante (es decir, float , double , long double , y tipos de punto flotante de ancho fijo (desde C++23) ).

Un programa puede especializar parcial o explícitamente una plantilla de variable de constante matemática siempre que la especialización dependa de un tipo definido por el programa .

Macro de prueba de características Valor Std Característica
__cpp_lib_math_constants 201907L (C++20) Constantes matemáticas

Ejemplo

#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 respuesta es " << x * v << '\n';
    constexpr auto γ{"0.577215664901532860606512090082402"sv};
    std::cout
        << "γ como 10⁶ sumas de ±ζ(m)/m   = "
        << egamma_aprox(1'000'000) << '\n'
        << "γ como egamma_v<float>       = "
        << std::setprecision(std::numeric_limits<float>::digits10 + 1)
        << egamma_v<float> << '\n'
        << "γ como egamma_v<double>      = "
        << std::setprecision(std::numeric_limits<double>::digits10 + 1)
        << egamma_v<double> << '\n'
        << "γ como egamma_v<long double> = "
        << std::setprecision(std::numeric_limits<long double>::digits10 + 1)
        << egamma_v<long double> << '\n'
        << "γ con " << γ.length() - 1 << " dígitos de precisión = " << γ << '\n';
}

Salida posible:

La respuesta es 42
γ como 10⁶ sumas de ±ζ(m)/m   = 0.577215
γ como egamma_v<float>       = 0.5772157
γ como egamma_v<double>      = 0.5772156649015329
γ como egamma_v<long double> = 0.5772156649015328606
γ con 34 dígitos de precisión = 0.577215664901532860606512090082402

Véase también

(C++11)
representa una fracción racional exacta
(plantilla de clase)