• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:精度を上げたいのですが…)

円の面積を求める方法について

このQ&Aのポイント
  • 円の面積を求めるプログラムを改善したい
  • 現在のプログラムでは精度が足りないため、改善策を知りたい
  • 円の一部の面積を求めやすくするプログラムを作成したい

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

No.2のプログラムは、半径1の円の1/4を求めて4倍しています(半径1の円の面積を計算している)から、半径0.5の円の面積を求めたければ1/4倍しないといけませんね。(半径1の円の面積はπ、半径0.5の円の面積は0.25π) 精度をあげるには繰り返し回数を増やすのが簡単ですかね。ただし回数を増やすとsumの数値が大きくなって精度落ちますので一定回数で区切って計算したほうがいいです。 質問の「円全体でなくその一部を考え、またその部分を簡単に面積が求められるようにわける」というのはよく意味が分かりませんでした。

tyuukichi
質問者

補足

円全体を考えるのではなく、ある一部を考えて、またその一部においても、簡単に面積が求められる部分にわける。って感じなんですけど。。なんかうまく伝えれなくてすいません。。とりあえず円を分割したら精度があがるのかなと。。そのプログラムが知りたいんですけど。。わかりにくい質問に答えていただいてありがとうございました!

その他の回答 (3)

回答No.3

> なぜか円周率が求まってしまいます。。 半径1の円の面積はπですが。

tyuukichi
質問者

お礼

…。 ありがとうございました(笑。

  • ryuta_mo
  • ベストアンサー率30% (109/354)
回答No.2

>円全体でなくその一部を考え・・・ 円の第一象限だけ計算することができます。 半径1の円の右上の部分です。 乱数の発生の部分はそのまま中心(0,0)から距離が1未満の場合円の中にあるとカウントして最後に4倍すれば結果が出ます。

tyuukichi
質問者

お礼

すいませんがどのように扇形を求めるプログラムを書けばいいのか教えてもらえないでしょうか。。わからないんです。。 えとつまりその式を4倍したらいいんですよね。

tyuukichi
質問者

補足

#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); } としたのですが、なぜか円周率が求まってしまいます。。どこか間違っていますか?どう書き換えればいいのか教えてください。

回答No.1

乱数の質がよければ、MAXを大きくするだけでいくらでも精度が上がると思います。

tyuukichi
質問者

お礼

ありがとうございました。

関連するQ&A