【问题标题】:Is the <random> library in c++11 portable?c++11 中的 <random> 库是否可移植?
【发布时间】:2013-01-28 06:03:23
【问题描述】:

c++11 中的库是否可移植?我避免使用 rand(),因为我听说它不可移植。

【问题讨论】:

    标签: c++ random c++11


    【解决方案1】:

    你如何定义“便携”?

    如果“可移植”,您的意思是“在给定相同输入的情况下将产生二进制相同的随机数序列”,那么是的,rand 不可移植。是的,C++ random generators 是可移植的(其中大多数。不是std::default_random_enginestd::random_device),因为它们实现了特定 算法。 rand 可以是任何东西,只要它不完全不同于随机数生成器。

    话虽如此,正如@PeteBecker 指出的那样,分布本身并没有那么明确。因此,虽然std::mt19937 将为给定种子生成相同的值序列,但不同的std::uniform_int_distributions 可以为相同的输入序列和范围提供不同的值。

    当然,如果您需要一致性,您可以随时定义自己的分布。

    【讨论】:

    • 是的,这就是我所说的便携。
    • 您可以找到在 my answer here 中定义的分布实现的基本原理。
    【解决方案2】:

    &lt;random&gt; 中描述的随机数引擎对其算法有明确的要求,以确保可移植性。分布没有。

    【讨论】:

    • 你有这方面的参考吗?
    • C++ 标准是这方面的参考。
    【解决方案3】:

    例如,您可以使用std::mt19937 (Mersenne Twister) 生成“给定相同输入的相同随机数序列”(来自@Nicol Bolas)。 rand() 绝对不能这样做,这很烦人。

    相关问题:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-12
      相关资源
      最近更新 更多