问题描述
当给定概率参数 0 时,几何分布是退化的。C++ 包括这样的分布。它是否定义了概率为 0 时的行为?
在我的机器上的 gcc 下,以下代码输出 9223372036854775808
(即 1ULL << 63
):
#include <random>
#include <iostream>
int main() {
std::mt19937_64 rng(0);
auto dist = std::geometric_distribution<uint64_t>(0.0);
std::cerr << dist(rng) << "\n";
return 0;
}
解决方法
根据 Latest C++ Standard,geometric_distribution
要求 p
大于零且小于 1。
explicit geometric_distribution(double p);
2 前提条件:0 p
3 备注:p
对应分布的参数。
如果您通过为 0
传递 p
违反了此先决条件,则您只是具有未定义的行为。任何事情都可能发生,而您的程序根本就是无效的。