2016-08-22 2 views
4

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).

+0

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

+0

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. –

+0

Wahrscheinlich wird 'b - a' in der uniform_real_distribution zu 'inf'. Überprüfen Sie Ihre Standard-Implementierung. – deniss

Antwort

Verwandte Themen