我想在C ++中生成一个合理任意长度的随机数。通过“合理的仲裁”,我的意思是受到主机速度和内存的限制。
我们假设:
我想从ceil(log10(MY_CUSTOM_RAND_MAX))
到0
10^(ceil(log10(MY_CUSTOM_RAND_MAX))+1)-1
的十进制数(基数10)进行采样
我有vector<char>
vector<char>
的长度为ceil(log10(MY_CUSTOM_RAND_MAX))
每个char
实际上是一个整数,0到9之间的随机数,用rand()
或类似方法挑选
如果我使用std::random_shuffle
来移动矢量,我可以从末尾迭代每个元素,乘以10的递增幂将其转换为unsigned long long
或者映射到我的最终范围的任何内容
我不知道std::random_shuffle
在随机性方面是否存在问题,尤其是在选择一系列rand()
结果来填充{{1}时}。
vector<char>
以可量化的方式以这种方式生成任意长度的随机数是多么粗略?
(我意识到Boost中有一个用于生成随机std::random_shuffle
数字的库。目前尚不清楚范围限制是什么,但它看起来像int
。那就是说,我意识到这个库这是关于STL的这一部分产生任意大的随机数的一般性问题。提前感谢您将答案集中在这一部分上。)
答案 0 :(得分:7)
我对这个问题的重点略显不清楚,但我会尝试从几个不同的角度回答: