正規分布するプログラムを教えてください。
正規分布する乱数プログラムを作りたいのですが、うまく作れません・・。
プログラムソースは長くなりますので見ていただかなくても結構なのですが、下記のようなプログラムを実行したところ、実行結果下記になり、正規分布にはなりませんでした・・。
色々ネットで調べたものの理解できないのでどなたか教えていただけないでしょうか><
正規分布を利用して、例えば50~100位の間に分布する乱数を生成したりしたいのです。。。
#include <math.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#define PI 3.14159265358979323846264
double p_nor(){
double rnd,t,u,r1,r2;
rnd=rand()%10000/10000.0;
t=sqrt(-2.0 * log(1-rnd));
u=2*PI*rnd;
r1=t*sin(u);
return r1;
}
int main(){
int i,bunpu[30]={};
double p,min=0,max=0,total=0;
srand((unsigned)time(NULL));
for(i=0;i<100000;i++){
p=p_nor();
for(int j=0;j<30;j++){
if(p>-2.0+0.1*j && p<=-1.9+0.1*j)
bunpu[j]++;
}
if(min>p)min=p;
if(max<p)max=p;
total+=p;
}
printf("min:%f max%f 平均%f\n",min,max,total/100000);
for(int j=0;j<30;j++){
for(i=0;i<bunpu[j]/200;i++){
printf("*");
}
printf("\n");
}
return 0;
}
実行結果
min:-1.711381 max0.803275 平均-0.247841
****************
************************************
********************
****************
**************
************
***********
**********
**********
*********
*********
********
********
********
********
********
********
********
*************************************
*************************
***********************
***********************
************************
****************************
********************************
****************************************************************
***********