プログラムが終わらない
Posted: 2015年6月14日(日) 01:45
以下のアルゴリズムに従って,2項乱数を生成し,niko.csvというファイルを作成するプログラムを作ったのですが
プログラムを起動してみるといつまでたってもプログラムが終わりません.
どこがおかしいのでしょうか…
n,pの値に指定はないですが,n=1000,p=0.95で計算しました.
よろしくお願いします.
2項乱数B(n,p)生成のための逆関数法によるアルゴリズム
STEP 1: Generate a random number U.
STEP 2: c= p/(1-p), i= 0, pr= (1-p)n, F= pr.
STEP 3: If U< F, set X= iand stop.
STEP 4: pr= [c(n-i)/(i+1)]pr, F= F+ pr, i= i+ 1.
STEP 5: Go to STEP 3.
プログラムを起動してみるといつまでたってもプログラムが終わりません.
どこがおかしいのでしょうか…
n,pの値に指定はないですが,n=1000,p=0.95で計算しました.
よろしくお願いします.
2項乱数B(n,p)生成のための逆関数法によるアルゴリズム
STEP 1: Generate a random number U.
STEP 2: c= p/(1-p), i= 0, pr= (1-p)n, F= pr.
STEP 3: If U< F, set X= iand stop.
STEP 4: pr= [c(n-i)/(i+1)]pr, F= F+ pr, i= i+ 1.
STEP 5: Go to STEP 3.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define lambda 1.0
main(){
FILE *fp;
double u,p,f,c,pr;
int n,i,j,x,z;
fp = fopen("niko.csv","wt");
if(fp==NULL){
fprintf(stderr,"cannot open file !\n");
exit(1);
}
printf("試行回数を入力してください: ");
scanf("%d", &n);
printf("成功確率を入力してください: ");
scanf("%lf", &p);
for(j=0;j<n;j++){
u=(double)rand()/(RAND_MAX+1.0);
c = p/(1-p);
i=0;
pr=(1-p);
for(z=1;i<n;z++){
pr = pr*(1-p);
}
f=pr;
while(u>=f){
pr=(c*(n-i)/(i+1))*pr;
f=f+pr;
i=i+1;
}
x=i;
fprintf(fp,"%d\n",x);
}
fclose(fp);
}