C言語で円周率πを扱う方法

C言語で円周率を扱う方法の解説ページアイキャッチ

このページでは、C言語 で円周率 π を扱う方法について解説していきます。

math.h をインクルードして M_PI を使う

おそらく多くの環境では、円周率は math.h で M_PI で定義されているはずです。

例えば私の環境では、math.h に下記のように M_PI が定義されています。

M_PIの定義(math.hから抜粋)
#define M_PI        3.14159265358979323846264338327950288   /* pi             */

ですので円周率を扱うのであれば、下記のように math.h をインクルードしてから、M_PI を円周率 π として扱えば良いです。

M_PIの使用例
#include <stdio.h>
#include <math.h> /* M_PIが定義されている */

int main(void) {

    printf("%f\n", M_PI); /* M_PIは円周率として扱われる */

    return 0;
}

M_PI 使用時の注意点

下記のページにも記載されているとおり、VC++ などを使用している場合は、math.h をインクルードする前に _USE_MATH_DEFINES#define してやる必要がある場合もあるようです。

https://hayakute.kantan-sakusaku.com/?p=2235

なので、math.h をインクルードしたのに “M_PI が定義されていない” みたいなコンパイルエラーが出る場合は、下記のように _USE_MATH_DEFINES を定義するようにしてやれば解決するかもしれないです。

M_PIの使用例
#define _USE_MATH_DEFINES
#include <stdio.h>
#include <math.h> /* M_PIが定義されている */

int main(void) {

    printf("%f\n", M_PI); /* M_PIは円周率として扱われる */
    
    return 0;
}

上記のように、使用するコンパイラ等によっては math.hM_PI が定義されていない場合があります。つまり M_PI が定義されているかどうかは処理系依存です(標準規格で M_PIを用意しなければならないと決まっていない)。

どんな環境で M_PI が定義されていないかどうかまではちょっと分からないですが、あなたが作成したソースコードで M_PI を使用している場合、もしかしたらそのソースコードは他の人の環境では M_PI の定義が不足していてコンパイルに失敗するような可能性があるということになります。

なので下のような状況になりかねない…。

君がくれたソースコード、

コンパイルできないんだけど…

僕の環境だけどコンパイルできるのに、

おかしいなぁ…

もちろん自身の環境でしか実行しないようなプログラムのソースコードであれば、M_PI が使えるのであればそのまま使ってしまっても良いです。

ただ、上記のように他の人がコンパイルすることも考慮し、どの環境でも M_PI を使用できるようにするためには、下記のように M_PI が定義されていない場合のみ M_PI を定義してやるような記述を加えておくと無難だと思います。

M_PI未定義の場合の対策
#include <stdio.h>
#include <math.h> /* M_PIが定義されている */

#ifndef M_PI
/* M_PIが未定義であればここで定義する */
#define M_PI 3.14159 /* 桁数はもっと多い方がいいかも */
#endif

int main(void) {

    printf("%f\n", M_PI); /* M_PIは円周率として扱われる */

    return 0;
}

#ifndef M_PI#endif の部分は M_PI の定義が見つからない場合のみに有効になります。

ですので、もし M_PI が定義されていない環境でコンパイルされた場合は、この部分で M_PI が定義され、以降で M_PI が使用できるようになります。

もし math.hM_PI が定義されている環境であれば、#ifndef M_PI#endif の部分は無効化されるので、そのまま math.hM_PI が使用されることになります。

こういった処理系依存の問題への対策には #ifndef#ifdef も)は便利なので是非覚えておいてください。

スポンサーリンク

まとめ

このページでは、C言語で円周率を扱う方法について解説しました!

多くの環境では math.hM_PI が定義されているので、まずはこれを使用するので良いと思います。

ただ、全ての環境で math.hM_PI が定義されているというわけではないので、この点には注意してください。

今回は既に定義されている円周率の値を使用する方法について解説しましたが、個人で円周率を使ったプログラムの動作確認をしたい場合などは、円周率の値を調べて下記のように自身で定義してやるのでも良いと思います!

PIを自分で定義
#define PI 3.14159

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です