我正在为直方图生成正常分布的数字。这是我的两个功能。第一个用于生成,第二个用于将它们转换为正态分布。由于某种原因,当我进行测试 printf 时,它只是返回最小负数。有人知道这件事吗?谢谢!
double s, u[1000], v[1000], z;
int transformed[1000];
void generateec(){
srand( time(NULL) );
for(int i = 0; i < 1000; ++i)
{
u[i] = rand() % 7-3;
v[i] = rand() % 7-3;
}
}
void transform(){
generateec();
for(int i = 0; i < 1000; ++i)
{
s = (u[i]*u[i])+(v[i]*v[i]);
transformed[i] = u[i]*(sqrt( (-2.0 * log(s) ) / s));
}
printf("%d %d %d \n", transformed[0], transformed[500], transformed[600]);
}
谢谢大家!
最佳答案
在:
for(int i = 0; i < 1000; ++i)
{
u[i] = rand() % 1;
v[i] = rand() % 1;
}
表达式:
rand() % 1
总是产生0
。
编辑:
由于程序是同时编辑的,现在的问题是程序中的sqrt
函数的参数可能是负值。如果 sqrt
参数为负数,则会发生域错误,并且 sqrt
将返回实现定义的值。
关于c - 生成正态分布直方图的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16004244/