From cppreference.com
Constants (since C++20)
Defined in namespace std::numbers
e_v
(variable template)log2e_v
log2e
(variable template)log10e_v
log10e
(variable template)pi_v
(variable template)inv_pi_v
1π
(variable template)inv_sqrtpi_v
1√π
(variable template)ln2_v
ln 2
(variable template)ln10_v
ln 10
(variable template)sqrt2_v
√2
(variable template)sqrt3_v
√3
(variable template)inv_sqrt3_v
1√3
(variable template)egamma_v
the Euler–Mascheroni constant γ
(variable template)phi_v
(1 + √52)
(variable template)inline constexpr double e
e_v<double>
(constant)inline constexpr double log2e
log2e_v<double>
(constant)inline constexpr double log10e
log10e_v<double>
(constant)inline constexpr double pi
pi_v<double>
(constant)inline constexpr double inv_pi
inv_pi_v<double>
(constant)inline constexpr double inv_sqrtpi
inv_sqrtpi_v<double>
(constant)inline constexpr double ln2
ln2_v<double>
(constant)inline constexpr double ln10
ln10_v<double>
(constant)inline constexpr double sqrt2
sqrt2_v<double>
(constant)inline constexpr double sqrt3
sqrt3_v<double>
(constant)inline constexpr double inv_sqrt3
inv_sqrt3_v<double>
(constant)inline constexpr double egamma
egamma_v<double>
(constant)inline constexpr double phi
phi_v<double>
(constant)Notes
A program that instantiates a primary template of a mathematical constant variable template is ill-formed.
The standard library specializes mathematical constant variable templates for all floating-point types (i.e. float, doublelongdouble, and
fixed width floating-point types
(since C++23)).
A program may partially or explicitly specialize a mathematical constant variable template provided that the specialization depends on a
.
macroValueStdFeature
(C++20)
Example
Run this code
#include<cmath>#include<iomanip>#include<iostream>#include<limits>#include<numbers>#include<string_view>autoegamma_aprox(constunsignediterations){longdoubles{};for(unsignedm{2};m!=iterations;++m)if(constlongdoublet{std::riemann_zetal(m)/m};m%2)s-=t;elses+=t;returns;};intmain(){usingnamespacestd::numbers;usingnamespacestd::string_view_literals;constautox=std::sqrt(inv_pi)/inv_sqrtpi+std::ceil(std::exp2(log2e))+sqrt3*inv_sqrt3+std::exp(0);constautov=(phi*phi-phi)+1/std::log2(sqrt2)+log10e*ln10+std::pow(e,ln2)-std::cos(pi);std::cout<<"The answer is "<<x*v<<'\n';constexprautoγ{"0.577215664901532860606512090082402"sv};std::cout<<"γ as 10⁶ sums of ±ζ(m)/m = "<<egamma_aprox(1'000'000)<<'\n'<<"γ as egamma_v<float> = "<<std::setprecision(std::numeric_limits<float>::digits10+1)<<egamma_v<float><<'\n'<<"γ as egamma_v<double> = "<<std::setprecision(std::numeric_limits<double>::digits10+1)<<egamma_v<double><<'\n'<<"γ as egamma_v<long double> = "<<std::setprecision(std::numeric_limits<longdouble>::digits10+1)<<egamma_v<longdouble><<'\n'<<"γ with "<<γ.length()-1<<" digits precision = "<<γ<<'\n';}Possible output:
The answer is 42 γ as 10⁶ sums of ±ζ(m)/m = 0.577215 γ as egamma_v<float> = 0.5772157 γ as egamma_v<double> = 0.5772156649015329 γ as egamma_v<long double> = 0.5772156649015328606 γ with 34 digits precision = 0.577215664901532860606512090082402 See also
(C++11)
represents exact rational fraction
(class template)