【发布时间】:2013-01-08 20:20:34
【问题描述】:
我正在使用 gcc 4.6.3 并创建大量随机短裤。我使用以下语句生成它们:
val = SHRT_MAX; //as defined by limits.h
while(array<end) {
*array++ = rand() % val;
}
这是一个相当快的操作,即使对于多达 5,000,000 个元素的数组也几乎可以立即完成。我对数字变化较小的排序效率感到好奇,并将其更改为:
val = 3;
这造成了相当大的速度差异,它的运行速度比原始语句慢得多。是什么导致了如此大的速度差异?
【问题讨论】:
-
两个词:编译器优化。有些模数比其他模数更容易修改。
-
注解,取一个均匀分布的随机数的模并不一定会产生一个范围内的均匀分布的随机数。
-
@honk - 您能否对此进行扩展(或链接到解释)?我不明白为什么会这样。
-
@GordonBailey:这几乎是关于此处随机数的常见问题解答。有关详细说明,请参阅eternallyconfuzzled.com/arts/jsw_art_rand.aspx。 stackoverflow.com/questions/2509679/… 是这里的答案。