c++ - 生成随机long long C++

标签 c++ random c++17 mersenne-twister

int 生成器

我目前使用以下代码生成确定性伪随机 int:

#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);

问题

这有两个问题:

  1. Distribution 的参数必须是int
  2. Distribution(Mersenne) 的结果是一个 int

问题

如何使用 MinMax 参数生成随机 long long 而不是 int也是 long long 而不是 int 吗?

上下文

我正在创建一个确定性游戏(点对点架构),并且需要 long long 的最大最小大小作为一种定点数(因为 floats 会导致不确定性)。

我不会接受以下答案:

  • 使用floatdouble
  • 建议生成一个 int 并将其转换为 long long
  • 非确定性地生成随机数(即,如果使用相同的种子,mersenne 是确定性的)

如果有的话,我更喜欢标准库中的解决方案。

理想情况下,该解决方案至少应与我在 64 位计算机上的现有代码一样高效。

最佳答案

documentation表示模板参数可以是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);

关于c++ - 生成随机long long C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66121565/

相关文章:

c++ - 继承和 protected 属性

c++ - 减少模板策略困惑

C++/模板/模板类型的显式初始化?

random - BigQuery 中固定行数的高效采样

c++ - 现代 C++ 中 std::bind 的替代方案

c++ - 简单的线程/互斥测试应用程序崩溃

drand48() 能返回 1 吗?

sql - 如何用随机值更新多行

c++ - 一维智能指针不适用于语法(*)++

c++ - 如何转义 spdlog 消息?