C++20 numbers 数学常数
01 C++20 numbers 数学常数
c++20 在 <numbers>
头文件中增加了一些数学常数
。1
数学常数 (C++20 起)定义于头文件 ,定义于命名空间 std::numbers
。
内联常函数 | 常函数定义 | 数学常数 | 常数的值 |
---|---|---|---|
inline constexpr double e | e_v<double> |
e e e | 2.718288183 |
inline constexpr double log2e | log2e_v<double> |
l o g 2 e log_2{e} log2e | 1.4427 |
inline constexpr double log10e | log10e_v<double> |
l o g 10 e log_{10}{e} log10e | 0.434294 |
inline constexpr double pi | pi_v<double> |
π \pi π | 3.14159265 |
inline constexpr double inv_pi | inv_pi_v<double> |
1 π \dfrac{1}{\pi} π1 | 0.31831 |
inline constexpr double inv_sqrtpi | inv_sqrtpi_v<double> |
1 π \dfrac{1}{\sqrt{\pi}} π1 | 0.56419 |
inline constexpr double ln2 | ln2_v<double> |
ln 2 \ln{2} ln2 | 0.693147 |
inline constexpr double ln10 | ln10_v<double> |
ln 10 \ln{10} ln10 | 2.30259 |
inline constexpr double sqrt2 | sqrt2_v<double> |
2 \sqrt{2} 2 | 1.41421 |
inline constexpr double sqrt3 | sqrt3_v<double> |
3 \sqrt{3} 3 | 1.73205 |
inline constexpr double inv_sqrt3 | inv_sqrt3_v<double> |
1 3 \dfrac{1}{\sqrt{3}} 31 | 0.57735 |
inline constexpr double egamma | egamma_v<double> |
欧拉常数 γ \gamma γ | 0.5772156649 |
inline constexpr double phi | phi_v<double> |
黄金比常数 Φ = 5 + 1 2 \Phi = \dfrac{\sqrt{5} + 1}{2} Φ=25+1 | 0.6180339887 |
02 测试
在vs2019 的16.5中已经提供了 <numbers>
。测试效果如下:
https://github.com/5455945/cpp_demo/blob/master/C%2B%2B20/numbers/numbers.cpp
#include <numbers>
#include <iostream>
void test_numbers01() {
std::cout << "std::numbers::e: " << std::numbers::e << " " << std::numbers::e_v<double> << std::endl;
std::cout << "std::numbers::log2e: " << std::numbers::log2e << " " << std::numbers::log2e_v<double> << std::endl;
std::cout << "std::numbers::log10e: " << std::numbers::log10e << " " << std::numbers::log10e_v<double> << std::endl;
std::cout << "std::numbers::pi: " << std::numbers::pi << " " << std::numbers::pi_v<double> << std::endl;
std::cout << "std::numbers::inv_pi: " << std::numbers::inv_pi << " " << std::numbers::inv_pi_v<double> << std::endl;
std::cout << "std::numbers::inv_sqrtpi: " << std::numbers::inv_sqrtpi << " " << std::numbers::inv_sqrtpi_v<double> << std::endl;
std::cout << "std::numbers::ln2: " << std::numbers::ln2 << " " << std::numbers::ln2_v<double> << std::endl;
std::cout << "std::numbers::ln10: " << std::numbers::ln10 << " " << std::numbers::ln10_v<double> << std::endl;
std::cout << "std::numbers::sqrt2: " << std::numbers::sqrt2 << " " << std::numbers::sqrt2_v<double> << std::endl;
std::cout << "std::numbers::sqrt3: " << std::numbers::sqrt3 << " " << std::numbers::sqrt3_v<double> << std::endl;
std::cout << "std::numbers::inv_sqrt3: " << std::numbers::inv_sqrt3 << " " << std::numbers::inv_sqrt3_v<double> << std::endl;
std::cout << "std::numbers::egamma: " << std::numbers::egamma << " " << std::numbers::egamma_v<double> << std::endl;
std::cout << "std::numbers::phi: " << std::numbers::phi << " " << std::numbers::phi_v<double> << std::endl;
std::cout << "std::numbers::e: " << std::numbers::e << " " << std::numbers::e_v<double> << std::endl;
}
int main() {
test_numbers01();
return 0;
}
输出:
std::numbers::e: 2.71828 2.71828
std::numbers::log2e: 1.4427 1.4427
std::numbers::log10e: 0.434294 0.434294
std::numbers::pi: 3.14159 3.14159
std::numbers::inv_pi: 0.31831 0.31831
std::numbers::inv_sqrtpi: 0.56419 0.56419
std::numbers::ln2: 0.693147 0.693147
std::numbers::ln10: 2.30259 2.30259
std::numbers::sqrt2: 1.41421 1.41421
std::numbers::sqrt3: 1.73205 1.73205
std::numbers::inv_sqrt3: 0.57735 0.57735
std::numbers::egamma: 0.577216 0.577216
std::numbers::phi: 1.61803 1.61803
std::numbers::e: 2.71828 2.71828