namespace std::numbers {
template <class T>
inline constexpr T pi_v = unspecified; // (1)
template <floating_point T>
inline constexpr T pi_v<T> = see below; // (2)
inline constexpr double pi = pi_v<double>; // (3)
円周率πを表す定数。
(1) : プライマリーテンプレート。これをインスタンス化するとプログラムは不適格となる
(2) : 任意の浮動小数点数型T
に対する定数定義。標準で定義される浮動小数点数型ごとの精度に応じた定数が定義される
(3) : double
型に対する定数定義
#include <iostream>
#include <numbers>
#include <cmath>
int main()
// double型定数
double a = std::numbers::pi;
std::cout << a << std::endl;
// 任意の浮動小数点数型の定数
float b = std::numbers::pi_v<float>;
std::cout << b << std::endl;
// 動的に計算する
double c = std::acos(-1.0);
std::cout << c << std::endl;
3.14159
3.14159
3.14159
バージョン
C++20
Clang: 11
GCC: 10.1
Visual C++: 2019 Update 5