- ベストアンサー
円の面積を求める方法について
- 円の面積を求めるプログラムを改善したい
- 現在のプログラムでは精度が足りないため、改善策を知りたい
- 円の一部の面積を求めやすくするプログラムを作成したい
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.2のプログラムは、半径1の円の1/4を求めて4倍しています(半径1の円の面積を計算している)から、半径0.5の円の面積を求めたければ1/4倍しないといけませんね。(半径1の円の面積はπ、半径0.5の円の面積は0.25π) 精度をあげるには繰り返し回数を増やすのが簡単ですかね。ただし回数を増やすとsumの数値が大きくなって精度落ちますので一定回数で区切って計算したほうがいいです。 質問の「円全体でなくその一部を考え、またその部分を簡単に面積が求められるようにわける」というのはよく意味が分かりませんでした。
その他の回答 (3)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> なぜか円周率が求まってしまいます。。 半径1の円の面積はπですが。
お礼
…。 ありがとうございました(笑。
- ryuta_mo
- ベストアンサー率30% (109/354)
>円全体でなくその一部を考え・・・ 円の第一象限だけ計算することができます。 半径1の円の右上の部分です。 乱数の発生の部分はそのまま中心(0,0)から距離が1未満の場合円の中にあるとカウントして最後に4倍すれば結果が出ます。
お礼
すいませんがどのように扇形を求めるプログラムを書けばいいのか教えてもらえないでしょうか。。わからないんです。。 えとつまりその式を4倍したらいいんですよね。
補足
#include <stdio.h> #include <time.h> #include <stdlib.h> #define MAX 1000 main(void) { int i; float x1, x2, en, sum=0.0, s; srand( (unsigned)time( NULL ) ); for(i=0;i<MAX;i++) { x1=((float)rand()/(float)RAND_MAX); x2=((float)rand()/(float)RAND_MAX); if(en=x1*x1+x2*x2<1.0) { sum++; } } s=(sum/MAX)*4; printf("円の面積:%15.6e\n",s); } としたのですが、なぜか円周率が求まってしまいます。。どこか間違っていますか?どう書き換えればいいのか教えてください。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
乱数の質がよければ、MAXを大きくするだけでいくらでも精度が上がると思います。
お礼
ありがとうございました。
補足
円全体を考えるのではなく、ある一部を考えて、またその一部においても、簡単に面積が求められる部分にわける。って感じなんですけど。。なんかうまく伝えれなくてすいません。。とりあえず円を分割したら精度があがるのかなと。。そのプログラムが知りたいんですけど。。わかりにくい質問に答えていただいてありがとうございました!