【发布时间】:2011-11-27 04:04:47
【问题描述】:
我的作业是在0 和2^30 之间生成随机整数。现在,在过去我们了解到rand() 只返回最大为RAND_MAX 的整数,这小于UINT_MAX,并且我们可以使用位移来填充UINT_MAX 的容量。从我所做的一些阅读中(在这里,关于 SO),我意识到如果这些数字的分布对我很重要,这可能不是一个好主意。话虽如此,我的教授已经指定了这种方法。
我的问题是,移位多少? RAND_MAX 和 UINT_MAX 之间的区别是否总是存在一个安全的常数来进行位移?或者是否需要进行一些初始探测以确定位移的数量?我是否应该继续移动一点点并检查UINT_MAX?
我问的原因是,UINT_MAX 被定义为至少一个特定的数字(65535),但在我的机器上,UINT_MAX 要大得多(4294967295)。这让我担心我可能会在周末完成作业,到达学校后发现一切都不够好,无法提交。
谢谢!
参考资料:
我已经阅读了几个类似的问题,但无法从他们那里得到答案。
Is the value of RAND_MAX always (2^n)-1?
generating a random number within range 0 to n where n can be > RAND_MAX
实际上,上面的第二个问题让我质疑这样做的价值?
【问题讨论】:
-
出于好奇,你上哪所学校?
-
位于不列颠哥伦比亚省温哥华的兰加拉学院(加拿大)。 :)
标签: c++ random bit-manipulation