【发布时间】:2013-01-28 06:03:23
【问题描述】:
c++11 中的库是否可移植?我避免使用 rand(),因为我听说它不可移植。
【问题讨论】:
c++11 中的库是否可移植?我避免使用 rand(),因为我听说它不可移植。
【问题讨论】:
你如何定义“便携”?
如果“可移植”,您的意思是“在给定相同输入的情况下将产生二进制相同的随机数序列”,那么是的,rand 不可移植。是的,C++ random generators 是可移植的(其中大多数。不是std::default_random_engine 或std::random_device),因为它们实现了特定 算法。 rand 可以是任何东西,只要它不完全不同于随机数生成器。
话虽如此,正如@PeteBecker 指出的那样,分布本身并没有那么明确。因此,虽然std::mt19937 将为给定种子生成相同的值序列,但不同的std::uniform_int_distributions 可以为相同的输入序列和范围提供不同的值。
当然,如果您需要一致性,您可以随时定义自己的分布。
【讨论】:
<random> 中描述的随机数引擎对其算法有明确的要求,以确保可移植性。分布没有。
【讨论】:
例如,您可以使用std::mt19937 (Mersenne Twister) 生成“给定相同输入的相同随机数序列”(来自@Nicol Bolas)。 rand() 绝对不能这样做,这很烦人。
相关问题:
【讨论】: