For*_*Bru 8 c c++ random unsigned-long-long-int
标准rand()功能给我的数字不够大:我需要unsigned long long的.我们如何获得非常大的随机数?我尝试修改一个简单的哈希函数,但它太大了,运行时间太长,从不产生小于1e5的数字!!
Bau*_*gen 16
您可以轻松地执行此操作std::uniform_int_distribution<unsigned long long>.
简单示例代码(取自此处,修改后使用unsigned long long):
#include <random>
#include <iostream>
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<unsigned long long> dis(lowerBorder, upperBorder);
for (int n=0; n<10; ++n)
std::cout << dis(gen) << ' ';
std::cout << '\n';
}
Run Code Online (Sandbox Code Playgroud)
请注意,这里为了演示目的而进行的mersenne twister播种并不完美,例如请参见此处.
这是一个便携式C99解决方案,它返回一个随机的64位数字:
unsigned long long llrand() {
unsigned long long r = 0;
for (int i = 0; i < 5; ++i) {
r = (r << 15) | (rand() & 0x7FFF);
}
return r & 0xFFFFFFFFFFFFFFFFULL;
}
Run Code Online (Sandbox Code Playgroud)
说明:rand()返回0到0范围内的整数,RAND_MAX并且RAND_MAX仅保证至少为32,767(15个随机位).long long保证有64位但可能更大.