Mathematical constants
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
|
(plantilla de variable) |
||
|
inv_sqrtpi_v
|
(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
|
(plantilla de variable) |
||
|
egamma_v
|
la constante de Euler-Mascheroni γ
(plantilla de variable) |
||
|
phi_v
|
la proporción áurea Φ
(
(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) |