c ++ 11中的<random>库是可移植的吗?</random>

时间:2013-02-12 20:09:45

标签: c++ random c++11

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

3 个答案:

答案 0 :(得分:18)

如何定义“便携式”?

如果是“便携式”,则表示“将在给定相同输入的情况下生成二进制相同的随机数序列”,然后是,rand不可移植。是的,C++ random generators是可移植的(大多数是。std::default_random_enginestd::random_device),因为它们实现了特定的算法。 rand被允许为任何东西,只要它与随机数生成器不完全相同。

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

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

答案 1 :(得分:6)

<random>中描述的随机数引擎对其算法有明确的要求,以确保可移植性。分发没有。

答案 2 :(得分:2)

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

相关问题: