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

オススメの参考書(PR)

C言語学習中だけど分からないことが多くて挫折しそう...という方には、下記の「スッキリわかるC言語入門」がオススメです!

まず学習を進める上で、参考書は2冊持っておくことをオススメします。この理由は下記の2つです。

  • 参考書によって、解説の仕方は異なる
  • 読み手によって、理解しやすい解説の仕方は異なる

ある人の説明聞いても理解できなかったけど、他の人からちょっと違った観点での説明を聞いて「あー、そういうことね!」って簡単に理解できた経験をお持ちの方も多いのではないでしょうか?

それと同じで、1冊の参考書を読んで理解できない事も、他の参考書とは異なる内容の解説を読むことで理解できる可能性があります。

なので、参考書は2冊持っておいた方が学習時に挫折しにくいというのが私の考えです。

特に上記の「スッキリわかるC言語入門」は、他の参考書とは違った切り口での解説が豊富で、他の参考書で理解できなかった内容に対して違った観点での解説を読むことができ、オススメです。題名の通り「なぜそうなるのか?」がスッキリ理解できるような解説内容にもなっており、C言語入門書としてもかなり分かりやすい参考書だと思います。

もちろんネット等でも色んな観点からの解説を読むことが出来ますので、分からない点は別の人・別の参考書の解説を読んで解決していきましょう!もちろん私のサイトも参考にしていただけると嬉しいです!

入門用のオススメ参考書は下記ページでも紹介していますので、こちらも是非参考にしていただければと思います。

https://daeudaeu.com/c_reference_book/

同じカテゴリのページ一覧を表示