Sebastian Lenartowicz - 7 months ago 35

C++ Question

OK, so I've got some RNG code that (when all is said and done) boils down to this:

`#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";

}

The output from this is 30 lines of

`inf`

Compiling with

`g++`

`-std=c++11`

Answer

According to C++14 section 26.5.8.2.2 paragraph 2:

```
Requires: a ≤ b and b − a ≤ numeric_limits<RealType>::max().
```

In your case, b-a is greater than the allowed range.