我目前正在使用此代码随机化一些变量。
srand(time(NULL));
do{vkmhrand = rand ();vkmh = vkmhrand/78;}while(vkmh <= 0 || vkmh > vmax);
vmax不会超过415,这意味着如果我把它变得像vkmh = rand()一样简单,那么随机化的大部分表将被丢弃,而且我也会得到一些很好的小数来使结果变得有点更有趣。
我知道rand()不是现有的最佳随机函数。我只是想一想,尝试使用尽可能多的表是一个好主意吗?这是浪费时间吗?或者它是否会加剧表中可能存在的任何模式?
答案 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);