生成随机longlongC++
int 发电机
我目前int使用以下代码生成确定性伪随机s:
#include <chrono>
#include <ctime>
#include <random>
#include <stdint.h>
const uint32_t CurrentTime = static_cast<uint32_t>(std::chrono::duration_cast<std::chrono::seconds>(std::chrono::steady_clock::now().time_since_epoch()).count());
std::mt19937 Mersenne = std::mt19937(static_cast<std::mt19937::result_type>(CurrentTime));
int Min = 3;
int Max = 6;
std::uniform_int_distribution<> Distribution(Min, Max-1);
int Result = Distribution(Mersenne);
问题
这有两个问题:
- 的参数
Distribution必须是ints。 - 从结果
Distribution(Mersenne)是int。
问题
我如何生成一个随机long long而不是一个int,Min并且Max参数也是long longs 而不是ints?
上下文
我正在创建一个确定性游戏(点对点架构),并且long long需要 a的大的最小大小作为一种定点数(因为floats 会导致非确定性)。
我不会接受以下答案:
- 使用
floats 或doubles - 建议生成一个
int并将其转换为long long - 非确定性地生成随机数(即如果使用相同的种子,则梅森是确定性的)
如果有的话,我更喜欢标准库中的解决方案。
理想情况下,该解决方案应该至少与我在 64 位机器上的现有代码一样有效。
回答
该文件说,模板参数可以是long long
long long Min = 3;
long long Max = 6;
std::uniform_int_distribution<long long> Distribution(Min, Max-1);
long long Result = Distribution(Mersenne);