見出し画像

【C言語】悠久のπ

画像をこんなにしたら、タイトルも大袈裟になってしまった。そんなに言うほどの記事でもないんだけど。

 まずは、前回記事です。

こちらに円の面積を求める課題があります。

円の面積は
$${\pi r^2}$$
で求められる簡単なものですが、難しいのは小数点。

とかく、コンピューターとは小数点が不得手である(あ、不得手なのは私か?😅)。

β版のバグ

まず、初版には不具合がありましたのでお詫びを。

面積を、次のように計算してしまいました。

(2 * PI * radius * radius)

なんてことだ。
課題は円周だっけ? 面積だっけ?
などとやっていたら、円周計算の
$${2 \pi r}$$
の2が残ってしまった。

仕様を正確に把握してからコードを書きましょう。

気を取り直して。


コード(初版)

コードはこちらです。

#define PI 3.14159265359

float area_cycle(int radius)                                  {
    return (PI * radius * radius);
}

int main(int argc, char** argv)
{
    float farea = area_cycle(4);
    printf("area of cycle (4) = %f\n", farea);
    farea = area_cycle(65535);
    printf("area of cycle (65535) = %f\n", farea);
    printf("\n");
    
    return 0;
}

そして、結果。

area of cycle (4) = 50.265484
area of cycle (65535) = 13492626432.000000

この結果を見て、ふと思う。

半径 65535 の結果。
小数点以下がきれいに 0 なんですけど。
たまたまでこんなことがあり得るのか?


電卓

電卓を叩く。

π×65,535×65,535
=13,492,625,932.83132

う。

ちょっと、ずれすぎちゃいます?


コード(double版)

型を変えてみる。

安易に「float」を選んだのだけど、「double」にしてみる。

double area_cycle_a(int radius)
{
    return (PI * radius * radius);
}

double darea = 0;
darea = area_cycle_a(65535);
printf("area of cycle a (65535) = %f\n", darea);

結果

お。
よさげ?

小数第2位まで一致したぞ。

てもそこまでってなぁ。


π

πは次の数値で定義したけど。

#define PI 3.14159265359

なら電卓は?

π=3.14159265359

んー?
一緒やん。

とりあえず、πの精度をもう少し上げてみる。

そんなときはこの本。
じゃーん。

π 暗黒通信団

「暗黒通信団」とは、なんだかアヤシゲな名前であるけど、いたってまっとうで、私が知ったきっかけは図書館に置いてあった『32ページの量子力学』という本でした。そのことはまた別の機会に。

『π』は、開けるとこんな感じ。

π

1ページに 10000 桁。
定価 ¥314- だったかな(笑)。

この数値を参考にして小数以下 20 桁までのばしてみる。

3.1415926535 8979323846

コード(π 20桁)

#define PIH 3.14159265358979323846
double area_cycle_h(int radius)
{
    return (PIH * radius * radius);
}

darea = area_cycle_h(65535);
printf("area of cycle h (65535) = %f\n", darea);
printf("\n");

結果


おお!
よくやった、C言語!(笑)


参考

小数点以下、 20 桁まで表示してみた。

13492625932.83131 98089 59960 93750 


この記事が気に入ったらサポートをしてみませんか?