在 gcc 实现中,这很简单;仅应用参数 as simple multiply and shift of the actual algorithm's output .但我可以想象其他算法会遇到像这样的特殊情况的问题。我应该更好地构建外部安全防护,还是只给 std::normal_distribution
的构造函数一个 0 作为标准偏差参数以获得“非随机分布”,即一个总是产生平均值的?
(抛开性能)
最佳答案
标准规定如下 (§26.5.8.4.4):
explicit normal_distribution(RealType mean = 0.0, RealType stddev = 1.0);
Requires: 0 < stddev.
因为 0
的这种标准推导被标准明确禁止,因此不能保证有效。因此,建立外部保障似乎是个好主意
即使典型的实现可以在 0 的标准推导上工作(不确定是否是这种情况),我可以想象一个实现来测试这种情况并在标准推导为零时抛出异常并抛出如果不是则异常(以确保代码可移植)。作为替代方案,代码可能会在某处除以标准推导,这对于 0
的推导也是有问题的。
关于c++ - `std::normal_distribution` 是否保证标准偏差为 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9186435/