円周率が出ない。。。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
山本

円周率が出ない。。。

#1

投稿記事 by 山本 » 15年前

#include <stdio.h>
#include <stdlib.h>

int main()
{
double pi;
printf("pi=%f\n",pi);
}

double calc_pi()
{double x,y,i,pi;
int count;
for(i=0;i<=1000;i++){
x=(double)rand() / (RAND_MAX + 1);
y=(double)rand() / (RAND_MAX + 1);
if((x*x+y*y)<1.0)
{count+=1.0;}
}
pi=count/1000*4.0;
return (int)pi;
}

これで円周率が出てくれないのはなぜ??

fatens

Re:円周率が出ない。。。

#2

投稿記事 by fatens » 15年前

>これで円周率が出てくれないのはなぜ??

・calc_pi 関数を呼びだしていない
・calc_pi 関数のプロトタイプ宣言がない
・countを0で初期化していない
・pi=count/1000*4.0 count/1000はint型同士の割り算なので結果もint型になってしまう
・return (int)pi int型にキャストしたのでは、小数点以下の値が帰らない

など

初級者

Re:円周率が出ない。。。

#3

投稿記事 by 初級者 » 15年前

プログラムは、思ったとおりには動きません。
書いたとおりに動きます。

パコネコ

Re:円周率が出ない。。。

#4

投稿記事 by パコネコ » 15年前

実際にうごいてるのは
/*
double pi;
printf("pi=%f\n",pi);
*/
これだけ…

>int count;
int(整数)でいいんですか?
どちらかというと「i」のほうが整数っぽい

初級者

Re:円周率が出ない。。。

#5

投稿記事 by 初級者 » 15年前

円の内側にある点の「個数」を数えるための変数ですから、
「当然」整数です。

パコネコ

Re:円周率が出ない。。。

#6

投稿記事 by パコネコ » 15年前

そうですか…
計算が楽になるかな~と思ったのですが…
それに1.0ずつ足していたので整数型ではないと考えたんですが、
ダメみたいですね。すいませんでした。

たいちう

Re:円周率が出ない。。。

#7

投稿記事 by たいちう » 15年前

> それに1.0ずつ足していたので整数型ではないと考えたんですが、
> ダメみたいですね。すいませんでした。

違和感を感じる着眼点は正しいですが、結論が逆でしたね。

1.0ずつ足しているのに整数型、ではなく、
整数型なのに1.0ずつ足している、です。

QERA

Re:円周率が出ない。。。

#8

投稿記事 by QERA » 15年前

#include <stdio.h>
#include <stdlib.h>

double calc_pi(void);

int main()
{
double pi;
pi = calc_pi();
printf("pi=%lf\n",pi);
}

double calc_pi()
{double x,y,pi,count=0;
int i;
for(i=0;i<=1000;i++){
x=(double)rand() / (RAND_MAX + 1);
y=(double)rand() / (RAND_MAX + 1);
if((x*x+y*y)<1.0)
{count+=1.0;}
}
pi=count/1000*4.0;
return pi;
}

こうですかね? 画像

初級者

Re:円周率が出ない。。。

#9

投稿記事 by 初級者 » 15年前

1001回の試行で得られたcountの値を1000で割っているため、
やや厳密性に欠けるでしょう。
まあ、モンテカルロ法自体がそうなんですけどね。

フリオ

Re:円周率が出ない。。。

#10

投稿記事 by フリオ » 15年前

 
ごめんなさい。勘違いです。
countはdoubleですね。
 
画像

閉鎖

“C言語何でも質問掲示板” へ戻る