【问题标题】:Is the sequence of random numbers generated with a given seed guaranteed to be the same across versions of the standard?使用给定种子生成的随机数序列是否保证在不同版本的标准中是相同的?
【发布时间】:2020-05-13 15:34:36
【问题描述】:

如果我从 C++ 标准库中用给定的数字(比如seed = 1)为随机数生成器播种,并生成一个随机数序列,这个序列是否保证在标准的未来版本中是相同的?

C++ 标准是否对此提供保证?

【问题讨论】:

  • 我相信这个问题的答案与当前由 C++ 标准定义的任何给定行为是否会保留在未来版本中以实现向后兼容性相同。这是只有 C++ 标准委员会才能回答的问题。

标签: c++ random standards c++-standard-library random-seed


【解决方案1】:

有点迂腐,对标准的未来版本没有任何保证,包括认为标准可能会有未来版本的想法。

现在,谈谈你真正的问题。 C++标准库中的“那个”随机数生成器?他们有很多。 rand 不是其中之一 :-)

有“随机数引擎”,可以生成“随机位序列”。它们包括:

  • linear_congruential_engine
  • mersenne_twister_engine
  • subtract_with_carry_engine

rand.predef 部分给出了特定随机数引擎所需的结果。这告诉您它们应该是便携式的。 [感谢@HowardHinnant 的参考。 ]

另一方面,分布(uniform_int_distribution 等)可能因实施而异。

【讨论】:

    【解决方案2】:

    C++ 随机数序列在标准的未来版本中是否会保持相同序列的问题,就像当前由 C++ 标准定义的任何给定行为是否会保留的问题一样在未来的版本中以实现向后兼容性。这是只有 C++ 标准委员会才能回答的问题。 (这是我的评论,移至答案。)

    【讨论】:

    • 标准委员会确实试图保持向后兼容性,但std::random_shuffle 是他们破坏向后兼容性的一个例子。 (Titus Winters 似乎对此有点恼火。)如果一个人的代码或测试代码需要随机数生成器来适应未来,那么最好的方法是编写自己的随机数生成器。
    猜你喜欢
    • 2013-04-05
    • 2016-09-20
    • 1970-01-01
    • 2020-10-13
    • 2015-11-23
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    相关资源
    最近更新 更多