标准rand()功能给我的数字不够大:我需要unsigned long long的.我们如何获得非常大的随机数?我尝试修改一个简单的哈希函数,但它太大了,运行时间太长,从不产生小于1e5的数字!!
我知道要生成随机长数,我在Java中执行以下步骤:
Random r = new Random();
return r.nextLong();
Run Code Online (Sandbox Code Playgroud)
在C++中,这段代码相当于什么?像这样?
return (long)rand();
Run Code Online (Sandbox Code Playgroud) Andrew Koenig的Accelerated C++问题 7-9 提问:
7-9。(困难)第 7.4.4/135 节中的 nrand 实现不适用于大于 RAND_MAX 的参数。通常,这个限制没有问题,因为无论如何 RAND_MAX 通常是最大可能的整数。尽管如此,在某些实现中 RAND_MAX 远小于最大可能的整数。例如,RAND_MAX 为 32767 (2^15 -1) 并且最大可能的整数为 2147483647 (2^31 -1) 的情况并不少见。重新实现 nrand,使其适用于所有 n 值。
如果n > RAN_MAX我的想法要采取
double temp = n/RAN_MAX + .5;
int mult = temp;
int randomNum = 0;
for (int i = 0; i != mult; mult++)
randomNum += rand();
Run Code Online (Sandbox Code Playgroud)
然后测试是否randomNum < n。这可以生成随机数> RAND_MAX吗?我不知道如何使用比我的计算机可以处理的更大的整数,所以我认为没有任何真正的方法可以分辨。