C++教科書/標準ライブラリ編/<numbers>の章
編集はじめに
編集C++20から、数学的な定数を提供する<numbers>
ヘッダーが導入されました。このヘッダーによって、プログラムに高精度な数値を簡単に利用できるようになりました。
名前空間 std::numbers
編集<numbers>
ヘッダーで定義されている数学的定数は、std::numbers
名前空間の中に宣言されています。
テンプレート化された定数
編集このヘッダーで提供される定数はテンプレート化されており、任意の浮動小数点型に対応しています。用意されている定数は以下の通りです。
e_v<T>
: 自然対数の底elog2e_v<T>
: log2(e)の値log10e_v<T>
: log10(e)の値pi_v<T>
: 円周率πの値inv_pi_v<T>
: 1/πの値inv_sqrtpi_v<T>
: 1/√πの値ln2_v<T>
: log(2)の値ln10_v<T>
: log(10)の値sqrt2_v<T>
: √2の値sqrt3_v<T>
: √3の値inv_sqrt3_v<T>
: 1/√3の値egamma_v<T>
: オイラー定数γの値phi_v<T>
: 黄金比φの値
非テンプレート化された定数
編集<numbers>
ヘッダーでは、上記の定数に加えてdouble
型の定数も提供されています。これらの定数は以下のように使用できます。
#include <numbers> double expr = std::numbers::e * std::numbers::pi; // eπを計算
使用例
編集高精度な値が必要な場合、<numbers>
ヘッダーで提供される定数を使うとコードが簡潔になります。例えば以下のようにかけます。
#include <numbers> // 三角比を計算する template<typename T> T sin_deg(T deg) { return std::sin(std::numbers::pi_v<T> * deg / 180); }
まとめ
編集<numbers>
ヘッダーは、C++20から追加された標準ライブラリで、精度の高い数学定数を提供します。これらの定数は、単精度・倍精度だけでなく、任意の浮動小数点型に対応しています。高精度計算が必要な場合に、簡潔かつ正確なコードを書くのに役立ちます。さらに標準的な数学関数と組み合わせることで、様々な計算を正確に行えます。