OK, also habe ich einige RNG Code bekam, dass (wenn alles gesagt und getan ist) läuft darauf hinaus, diese nach unten:std :: MT19937 und std :: uniform_real_distribution Rückkehr Grenzwert jedes Mal
#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";
}
Der Ausgang Daraus ergeben sich 30 Zeilen von inf
. Warum?
Kompilieren mit g++
Debian 4.9.2-10, mit -std=c++11
und keine anderen Flags. Und bevor irgendjemand anderes dazu Stellung nimmt, benutze ich den eingebauten Mersenne Twister-basierten RNG, weil meine Anwendung qualitativ hochwertige Zufallszahlen benötigt und sie mit der Systemzeit sät (also nein, es ist nicht nur der selbe Startwert und wieder).
Haben Sie 'srand versucht (Zeit (NULL))'? Ich habe nie Boosts zufällige Objekte benutzt, aber mir wurde beigebracht, dass man immer das Rng säen muss. – DeepDeadpool
Das ist es, was der arg zu dem RNG tut - säen es mit der aktuellen Systemzeit. Das heißt, ich werde die Frage bearbeiten, um es klarer zu machen. –
Wahrscheinlich wird 'b - a' in der uniform_real_distribution zu 'inf'. Überprüfen Sie Ihre Standard-Implementierung. – deniss