我正在使用C ++ 11的随机库生成确定性随机值,我需要将输出限制为各种范围,并且自然使用std::uniform_int_distribution
,但令我沮丧的是,该规范为库实现提供了太多的自由度,并且输出在X86之间有所不同-64 Linux和X86 Windows 7。
除了实现自己的发行版之外,还有什么选择可以确保无论库实现如何,输出都是确定性的?
最佳答案
除了实施自己的发行版以外,还有什么选择可以确保
无论库实现如何,输出都是确定性的?
除了实现自己的发行版之外,别无选择,以确保无论库实现如何,输出都是确定性的。虽然引擎是确定性的,但分布不是。uniform_int_distribution
的典型实现将涉及“拒绝”算法,该算法将反复从URNG中获取一个数字,如果结果不在所需范围内,请将其丢弃并重试。该主题的变体将通过将范围值折叠成范围内的值来优化该算法,以便在不偏倚接受范围的情况下最小化拒绝,就像简单的offset + lcg() % range
算法那样。
关于c++11 - 需要使用C++ 11进行确定性均匀分布,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26091318/