【发布时间】:2014-02-25 08:03:07
【问题描述】:
我知道这可能是一个“老”问题,但我想关注概率。
我的第一个问题是:
在 C 中,rand() 将给出一个从0 到RAND_MAX 的数字,这个区间中的每个数字是否有相同的概率被rand() 选择?
第二个问题:
如果rand() 让从0 到RAND_MAX 的每个数字具有相同(或大致相同)的概率被选择,当我想获得一个从0 到N-1 的随机数(N-1
rand()%N
但是如果RAND_MAX不是N的倍数,那么从0到N-1随机数的概率可能不一样
例如,假设 RAND_MAX=150 和 N=100,当我做rand()%100 时,从 0 到 49 的数字将比从 50 到 99 的数字更有可能被选择,因为 150 不是100.
C中有没有算法或函数可以让每个随机数有相同的概率被选中?
【问题讨论】:
-
您可以除以双倍:rand()/(double)RAND_MAX 并乘以您的范围,但这还有一些其他问题,也许有人可以指出。
-
只需将“可能性”替换为“概率”,考虑到任何伪 RNG(随机数生成器)的理论限制,这两个问题的答案都是肯定的。
-
我不经常向微软推荐任何东西,但你应该注意:channel9.msdn.com/Events/GoingNative/2013/…
-
rand() / (double)RAND_MAX将随机数缩放到[0,1]范围有什么问题。这种方式应该避免偏见 -
@Brandin 看 6:30 左右的视频。