尝试使用整个rand()表是个好主意吗?

时间:2016-04-07 07:09:56

标签: c random numbers

我目前正在使用此代码随机化一些变量。

srand(time(NULL));
do{vkmhrand = rand ();vkmh = vkmhrand/78;}while(vkmh <= 0 || vkmh > vmax);

vmax不会超过415,这意味着如果我把它变得像vkmh = rand()一样简单,那么随机化的大部分表将被丢弃,而且我也会得到一些很好的小数来使结果变得有点更有趣。

我知道rand()不是现有的最佳随机函数。我只是想一想,尝试使用尽可能多的表是一个好主意吗?这是浪费时间吗?或者它是否会加剧表中可能存在的任何模式?

2 个答案:

答案 0 :(得分:1)

缩放rand()的输出实际上意味着在您的情况下,您可以使用更多的位。假设它们的值彼此独立(对于rand()的所有实现可能都不是这样),这通常是一件好事。但是,您必须要注意,这些附加位不用于生成高阶位&#34;更随机&#34; (不太可预测)但只是为了给你更多的十进制数字,所以你的解决方案空间有更好的分辨率。

在一定范围内生成浮动的常用方法是:

double vkmh = (double) rand() / RAND_MAX * (vmax-vmin) + vmin; 

如果你对int有好处,通常的方法是:

unsigned int = rand() % (vmax - vmin + 1) + vmin;

如果RAND_MAX不是(vmax - vmin + 1)分布式值的多个

,这会导致分布略有偏差

答案 1 :(得分:0)

使用此功能,我并不担保它的随机性

srand(time(NULL));
do {
  vkmhrand = rand () % 415;
  vkmh = vkmhrand/78;
}
while(vkmh <= 0 || vkmh > vmax);