円周率をモンテカルロ法で求めようとして、下のプログラムを作ったのですが、家のパソコンでは上手く表示されるのに
学校のパソコンでは「セグメントエラー」と出てしまいます。(汗)
原因が分かる人は教えてください。m(_ _)m

#include <stdio.h> #include <stdlib.h> #include <math.h>
#define rnd() (1.0 / (32767.0 + 1.0)) * rand()/*0から1までの乱数*/
#define n 5000000 /*試行回数*/
#define BETTER 129 /*乱数を配列に登録する数*/
double pool[BETTER];
void first_better_rnd(void)/*まず乱数を配列に登録*/
{ int i;
for(i = 0; i < BETTER; i++){pool[i] = rnd();} }
double better_rnd(void)/*出来た乱数の配列のiを適当に変えて、そこにまた乱数を入れる*/
{ int i =(int) BETTER / 3 ; double r; i = (int)(BETTER / pool[i]);
i = i - 1 ; r = pool[i]; pool[i] = rnd(); return r; }
int main()/*モンテカルロ(当たり外れ)法*/
{ int i, h; double x, y, p; h = 0;
for(i = 0; i < n; i++){ x = better_rnd(); y = better_rnd();
if(y < sqrt(1 - x*x)) h++; }
p =(double) h / n; /*4分円に入る確率がπ/4である事を利用している。*/
printf("円周率 = %Lf \n", 4 * p); return(0); }