C++ で PI 定数を使用する方法

  1. GNU C ライブラリから M_PI マクロを使う
  2. std::numbers::pi 定数を C++ 20 から使用
  3. 自分の PI 定数変数を宣言する

この記事では、C++ で PI 定数値を宣言して使う方法を紹介します。

GNU C ライブラリから M_PI マクロを使う

C 標準数学ライブラリの定義済みマクロ式を使用しています。ライブラリには複数の共通の数学定数が定義されています。マクロ M_PI は浮動小数点変数に代入したり、計算でリテラル値として利用したりすることができます。マニピュレータ関数 setprecision を使用していることに注目してください。

定数 定義
M_E 自然対数の基底
M_LOG2E M_E の基数 2 の対数
M_LOG10E M_E の 10 を底とする対数
M_LN2 2 の自然対数
M_LN10 10 の自然対数
M_PI 円周率、円の円周と直径の比率
M_PI_2 円周率を 2 で割る
M_PI_4 円周率を 4 で割ったもの
M_1_PI 円周率の逆数(1 / π)
M_2_PI 円周率の逆数の 2 倍
M_2_SQRTPI 円周率の平方根の逆数の 2 倍
M_SQRT2 2 の平方根
M_SQRT1_2 2 の平方根の逆数(1/2 の平方根でもある
#include <iostream>
#include <iomanip>
#include <cmath>

using std::cout;
using std::endl;

int main() {
    double pi1 = M_PI;
    cout << "pi = " << std::setprecision(16)
         << M_PI << endl;
    cout << "pi * 2 = " << std::setprecision(16)
            << pi1 * 2 << endl;
    cout << "M_PI * 2 = " << std::setprecision(16)
            << M_PI * 2 << endl;

    cout << endl;
    return EXIT_SUCCESS;
}

出力:

pi = 3.141592653589793
pi * 2 = 6.283185307179586
M_PI * 2 = 6.283185307179586

std::numbers::pi 定数を C++ 20 から使用

C++20 標準以降、この言語は <numbers> ヘッダで定義された数学定数をサポートしています。これらの定数は,より良いクロスプラットフォーム対応を提供することになっていますが,まだ初期の段階であり,様々なコンパイラがまだサポートしていないかもしれません.定数の完全なリストは here で見ることができます。

#include <iostream>
#include <iomanip>
#include <numbers>

using std::cout;
using std::endl;


int main() {
    cout << "pi = " << std::setprecision(16)
         << std::numbers::pi << endl;
    cout << "pi * 2 = " << std::setprecision(16)
            << std::numbers::pi * 2 << endl;

    cout << endl;
    return EXIT_SUCCESS;
}
pi = 3.141592653589793
pi * 2 = 6.283185307179586

自分の PI 定数変数を宣言する

あるいは、必要に応じて PI 値やその他の数学的定数を持つカスタム定数変数を宣言することもできます。これはマクロ式か変数の constexpr 指定子を使って行うことができます。以下のサンプルコードは,両方のメソッドの使用方法を示しています.

#include <iostream>
#include <iomanip>

using std::cout;
using std::endl;

# define MY_PI 3.14159265358979323846
constexpr double my_pi = 3.141592653589793238462643383279502884L;

int main() {
    cout << std::setprecision(16) << MY_PI << endl;
    cout << std::setprecision(16) << my_pi << endl;

    return EXIT_SUCCESS;
}
comments powered by Disqus