生成随机long long C++
Generate random long long C++
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
的参数必须是 int
s。
Distribution(Mersenne)
的结果是 int
。
问题
如何生成随机 long long
而不是 int
,Min
和 Max
参数也是 long long
而不是 int
s?
上下文
我正在创建一个确定性游戏(点对点架构),并且需要 long long
的大最小尺寸作为一种定点数(因为 float
s 可能导致不确定性)。
我不会接受以下答案:
- 使用
float
s 或 double
s
- 建议生成
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);
这对你有用吗?
#include <climits>
#include <random>
#include <iostream>
int main()
{
std::random_device rd;
std::mt19937 gen(rd()); // Here you can use any seed to make it deterministic
std::uniform_int_distribution<long long> distrib(LLONG_MIN, LLONG_MAX);
for (int n = 0; n < 5; ++n)
std::cout << distrib(gen) << ' ';
std::cout << '\n';
}
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
的参数必须是int
s。Distribution(Mersenne)
的结果是int
。
问题
如何生成随机 long long
而不是 int
,Min
和 Max
参数也是 long long
而不是 int
s?
上下文
我正在创建一个确定性游戏(点对点架构),并且需要 long long
的大最小尺寸作为一种定点数(因为 float
s 可能导致不确定性)。
我不会接受以下答案:
- 使用
float
s 或double
s - 建议生成
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);
这对你有用吗?
#include <climits>
#include <random>
#include <iostream>
int main()
{
std::random_device rd;
std::mt19937 gen(rd()); // Here you can use any seed to make it deterministic
std::uniform_int_distribution<long long> distrib(LLONG_MIN, LLONG_MAX);
for (int n = 0; n < 5; ++n)
std::cout << distrib(gen) << ' ';
std::cout << '\n';
}