我有一个问题,我需要在 -3 和 3 之间生成 1000 个高斯分布数,然后将它们绘制在直方图上。到目前为止,这是我的代码:
全局声明的数组:
double s, u[1000], v[1000], z;
int gauss[1000];
double transformed[2000];
void run(){
int max;
while(1){
srand( time(NULL) );
generateec();
transform();
max = findMax();
plot( max );
getchar();
}}
void plot ( int max )
{
int j, s;
for ( j=0; j<maxPlus; j++ )
{
printf("%3d (%5d) > ", j, gauss[j] );
for ( s=0; s<transformed[j]*barWidth/max; s++ ) printf("|");
printf("\n");
}
}
int findMax()
{
int j;
int max = transformed[0];
for ( j=1; j < maxPlus; j++ )
{
if ( transformed[j] > max )
max = transformed[j];
}
return max;
}
void generateec(){
srand( time(NULL) );
for(int i = 0; i < 1000; ++i)
{
u[i] = (double)rand()/(double)(RAND_MAX);
v[i] = (double)rand()/(double)(RAND_MAX);
}
}
void transform(){
for(int i = 0; i < 1000; ++i)
{
if( (u[i] + v[i]) > 0){
s = (u[i]*u[i])+(v[i]*v[i]);
transformed[2*i] = sqrt(-2.0 * log(u[i])) * cos(2 * pi * v[i]);
transformed[2*i+1] = sqrt(-2.0 * log(u[i])) * sin(2 * pi * v[i]);
}
}
printf("%d %d %d \n", transformed[0], transformed[500], transformed[600]);
}
我从 main 函数调用 run 函数,生成数字,转换它们,然后绘制它们。出于某种原因,当我运行它时,我得到了全零。我不知道为什么,任何帮助都会很棒,
多谢你们!