【发布时间】:2012-12-10 13:57:58
【问题描述】:
我正在使用 OpenVMS 在 C 中进行开发,我编写了一个代码,将 1001 (0-1000) 个元素数组、1000 (0-999) 个介于 0 和 50 之间的随机数放入其中。代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main(){
int vet[1000], fre[50];
int i;
srand(time(NULL));
for(i=0;i<1000;i++){
vet[i]=(rand()%51);
}
for(i=0;i<1000;i++){
printf("%d\n", vet[i]);
}
for(i=0;i<1000;i++){
fre[vet[i]]=fre[vet[i]]+1;
}
for(i=0;i<51;i++){
printf("The number %d was generated %d times\n", i, fre[i]);
}
}
当我显示每个数字产生了多少次时,我看到数字 50 有一个很大的数字,有时比其他数字的两倍还多,有人可以帮助我吗?
解决了有效的代码我现在必须使用 srand()
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main(){
int vet[1000], fre[51] = {0};
int i;
srand(time(NULL));
for(i=0;i<1000;i++){
vet[i]=(rand()%51);
}
for(i=0;i<1000;i++){
printf("%d\n", vet[i]);
}
for(i=0;i<1000;i++){
fre[vet[i]]=fre[vet[i]]+1;
}
for(i=0;i<51;i++){
printf("The number %d was generated %d times\n", i, fre[i]);
}
}
[EOB]
谢谢大家
【问题讨论】:
-
rand()PRNG 的质量非常低。如果您需要高质量的 PRN 流,您最好搜索一个更好的,例如Mercenne twister 生成器。如果GSL 在 OpenVMS 上编译,它会附带许多 PRNG。作为最后的手段,OpenVMS 支持drand48PRNG。在侧节点上,fre永远不会初始化(全为 0)。 -
我从来没有用过这些其他的,我今晚会看,谢谢! ;)