π = 3.14159265

パソコンの楽しみの一つに円周率を求めると言う物がございますが、
アレは以下に早く計算結果を導き出すかといったアルゴリズムの訓練だなんて話を
お聞きしたのですが、日曜プレイヤーな私はただ3.14とゆう数字を導き出したいだけなのです。

本屋で立ち読みしてたらなんかぐっとくる導き出し方があったので家に帰ってやってみたよ!

的に向かって矢を放って的内に収まる確率から円周率を導き出すよ☆

f:id:giva_0311:20090421193055j:image

circle.c

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

double sum_num = 1000000.0; /*趣味レーション回数*/
double x;
double y;
double pi;
double area;
double GetRamdom(double min, double max);
double Pitagoras(double x, double y);
float average = 0;

int main(void){
  int i;
  int count = 0;
  srand( (unsigned int) time(NULL) );
  for (i=0; i<sum_num; i++){
    x = GetRamdom(0,10);
    y = GetRamdom(0,10);
    area = Pitagoras(x,y);
    if (area < 100){

      count++;
    }
  }
  average = count / sum_num;
  pi = (4*average);
  printf("%f\n",pi);
  return 0;
}

double GetRamdom(double min, double max) {
  return min + (double)(rand()*(max-min)/(1.0+RAND_MAX));
}

double Pitagoras(double x, double y) {
  double area;
  area = x*x+y*y;
  return area;
}


数回繰り返した出力結果

3.142912
3.142424
3.139420
3.144492
3.143692
3.140112
3.140112



おおいいんじゃないですか。うふふ