好的,所以我有一些RNG代码(当完成所有内容时)归结为:
#include <limits>
#include <random>
#include <chrono>
#include <iostream>
double randomValue() {
// Seed a Mersenne Twister (good RNG) with the current system time
std::mt19937 generator(std::chrono::system_clock::now().time_since_epoch().count());
std::uniform_real_distribution<double> dist(
std::numeric_limits<double>::lowest(),
std::numeric_limits<double>::max()
);
// Problem lives here
for (unsigned int i = 0; i < 30; i++)
std::cout << dist(generator) << "\n";
}
此输出是30行inf
。为什么呢?
使用g++
编译-std=c++11
Debian 4.9.2-10,没有其他标记。并且,在其他任何人评论它之前,我使用内置的基于Mersenne Twister的RNG,因为我的应用程序需要高质量的随机数,并且用系统时间播种它(所以不,它不仅仅是相同的种子并且一遍又一遍。)
答案 0 :(得分:10)
根据C++14 section 26.5.8.2.2 paragraph 2:
Requires: a ≤ b and b − a ≤ numeric_limits<RealType>::max().
在您的情况下,b-a大于允许的范围。