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