gpt4 book ai didi

C++ std::mt19937 和 rng 状态保存/加载和可移植性

转载 作者:IT老高 更新时间:2023-10-28 23:20:56 30 4
gpt4 key购买 nike

我希望能够保存和加载 RNG 的状态,这样我就可以从给定点(应用程序保存/快照)再现相同的随机值。

我看到有一个运算符 << 和 >> 重载,它似乎以数字序列的形式保存到字符串中。

  • 这是最好/唯一的保存方式吗?我不介意只使用固定大小的二进制状态值而不是这个空格分隔的字符串,然后我需要为我的文件格式添加前缀或放置分隔符。
  • 这是便携的吗?例如我可以在不同的编译器版本之间传输,甚至在 MSVC 和 GCC 之间传输,以在给定相同配置的分布的情况下生成相同的数据集(浮点情况下的误差很小,整数数学精确)?

最佳答案

是的,operator<<operator>>是导入或导出随机数生成器状态的唯一方法。如果您愿意,可以轻松地将文本表示转换为二进制表示。

反序列化和序列化 mt19937状态应该在实现之间是可移植的。通过流操作符读取和写入引擎状态的结果由标准明确定义,只要您确保流具有相同的语言环境。

operator<< 的要求见 § 26.5.1.5和 operator>> ,然后是第 26.5.3.2 节,用于 mersenne_twister_engine文本表示 , 其中 mt19937是一个定义良好的 typedef。

关于C++ std::mt19937 和 rng 状态保存/加载和可移植性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27727012/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com