【发布时间】:2022-01-20 19:28:57
【问题描述】:
例如,以下代码挂起,将我的设置与最新版本的 g++ 和 GNU 库一起使用:
#include <random>
#include <cstdio>
std::default_random_engine rng;
int main(){
std::poisson_distribution<long> mine(34387423874230847234.0);
std::printf("%ld\n", mine(rng));
}
对 min 和 max 函数 here 的描述似乎表明它将输出限制为类型参数的最大可能值,在本例中为 long。但显然这并没有发生。这是预期的行为吗?
编辑:当我链接到 LLVM libc++ 时,泊松分布总是返回 LLONG_MAX,这是我所期望的。这是 GNU libstdc++ 错误吗?
【问题讨论】:
-
使用
std::cout,而不是printf。使用错误的输出格式说明符会导致未定义行为的风险。 -
@PaulMcKenzie 我已经更新了我的代码。我改编的代码甚至没有打印出随机数,所以我很确定这不是问题。
标签: c++ stl c++-standard-library libstdc++