ページ 11

円周率の近似値について!

Posted: 2012年1月11日(水) 19:01
by kokko
細分化した台形面積を集積することで、円周率πの近似値を求めたプログラムを作ってみたのですが、うまくコンパイルできません。
アドバイスお願いします。

コード:

#include <stdio.h>
#include <math.h>
#define N 1000
 
int main(void) {
double old_y,new_y,old_x,new_x,d,S;
int i;
 
d = 1.0 / N;
S = 0;
 old_y = 1;
 old_x = 0;
 
for (i = 1;i <= N;i++) {
 new_x = i * d;
 new_y = sqrt(1 - new_x * new_x);
 
S = ((old_y + new_y) * d / 2.0);
 
old_y = new_y;
old_x = new_x;
}
 
printf ("分割数 = %d,π = %f\n",N,S * 4);
 
return 0;
}

Re: 円周率の近似値について!

Posted: 2012年1月11日(水) 19:04
by beatle
フォーラムルールお読みになりました?
「コンパイルエラーの質問時は必ず最低限のエラーメッセージも書きましょう。」と書いてあります.

それから,インデントをきっちりすることで発見できるエラーもあります.
しっかりインデントしたソースコードを貼りつけてください.
詳しくは投稿前チェックリスト/インデントを揃えようを御覧ください.

Re: 円周率の近似値について!

Posted: 2012年1月11日(水) 19:13
by non
コンパイルは通りましたけど・・・???

Re: 円周率の近似値について!

Posted: 2012年1月11日(水) 22:09
by box
kokko さんが書きました:細分化した台形面積を集積する
集積しているようには見えないのですが、私の見間違いでしょうか。
それから、使っている変数の意味を説明してください。

Re: 円周率の近似値について!

Posted: 2012年1月11日(水) 23:48
by 初級者
平方根を求めるところで、一工夫が必要みたいです。
いちばん右端の図形の上底を求める際に、どうやらsqrt()の引数が
負になってしまうことがあるようです。そこで、強制的に0にしてみました。

コード:

#include <stdio.h>
#include <math.h>

#define N (1000)

int main(void)
{
    double x, y0 = 1, y1, h = 1. / N, s = 0;
    int i;

    for (i = 1; i <= N; i++) {
        x = i * h;
        y1 = (i != N) ? sqrt(1. - x * x) : 0.;
        s += (y0 + y1) * h / 2;
        y0 = y1;
    }
    printf("分割数 = %d,π = %f\n", N, s * 4);
    return 0;
}