我试图保存随机数生成器的状态,如下所示:
.my-tall-div {
background: url(/path/to/image.jpeg) center center no-repeat;
background-size: cover;
}
我观察到的是状态是1248个数字的向量而且只有624个数字被写入文件中。有没有办法在一次尝试中写入和读取所有1248个数字(我想我正在尝试增加ofstream的容量/大小)。
提前致谢。
答案 0 :(得分:1)
正如@knivil所说,州只能代表624个号码。请告诉我们你是如何观察1248的?
修改强>
我对此代码有一致的结果,您可以运行它并检查吗?
#include <fstream>
#include <random>
#include <iostream>
std::mt19937 deser(std::string fname)
{
std::ifstream f{fname, std::ifstream::binary};
std::mt19937 res;
f >> res;
return res;
}
void ser(std::string fname, std::mt19937 rng)
{
std::ofstream f(fname, std::ofstream::binary);
f << rng;
}
void printRand(std::mt19937 rng)
{
std::uniform_int_distribution<> uid{1, 100};
std::cout << uid(rng) << std::endl;
}
int main()
{
auto fname{"R:\\RngState.txt"};
std::mt19937 rng{std::random_device{}()};
ser(fname, rng);
printRand(rng);
rng = deser(fname);
printRand(rng);
return 0;
}
答案 1 :(得分:0)
从algorithm可以看出,Mersenne Twister引擎需要记住
n = "degree of occurrence"
大小整数
w = "word size"
用于生成系列的位。对于mt19937,它根据定义保留n = 624
和w = 32
。因此mt19937的状态由624个32位整数唯一确定。
你的生成器的实现当然可以安全更多的临时结果来加速计算,但引擎的状态恰好由624个整数给出,写下其余的状态是没有意义的。