C++: Eigener "Zufallsgenerator"?

Achtung Anfänger am Werk:

Ich habe versucht einen eigenen "Zufallsgenerator" zu schreiben, dafür habe ich folgenden Code benutzt:

long time();
long random(long max, long seed = time());

//zählt welche Zahl bei 100 generierten Zufallszahlen wie oft vorkommt
int main() {...}

//liefert die aktuelle Zeit
long time() {...}

long random(long max, long seed) {
    
    return seed%max;
}

Wie zu erwarten waren die Ergebnisse zwar irgendwie zufällig jedoch nicht gleichmäßig verteilt, hier eine Beispielausgabe :

Zahl 0: 0 mal | Zahl 1: 63 mal | Zahl 2: 37 mal | Zahl 3: 0 mal | Zahl 4: 0 mal

Danach wollte ich aber aus reiner Interesse wissen welcher Seed denn jeweils übermittelt wird und habe dem Code nur eine Zeile hinzugefügt:

long time();
long random(long max, long seed = time());

//zählt welche Zahl bei 100 generierten Zufallszahlen wie oft vorkommt
int main() {...}

//liefert die aktuelle Zeit
long time() {...}

long random(long max, long seed) {
    
    std::cout << seed << std::endl;

    return seed%max;
}

Und mit Verwunderung musste ich feststellen, dass die Werte nun relativ gleichmäßig verteilt ausgegeben wurden (nach den einzelnen Seeds natürlich), eine Beispielausgabe:

Zahl 0: 19 | Zahl 1: 24 | Zahl 2: 18 | Zahl 3: 20 | Zahl 4: 19

  • Warum sind die Werte beim 2. Codebeispiel gleichmäßiger verteilt?
  • Kann ich es irgendwie hinbekommen dass die Werte so verteilt sind wie im 2. Codebeispiel, ohne dabei etwas in der Konsole ausgeben zu müssen?

PS. Ich dachte dass die bessere Verteilung im 2. Codebeispiel möglicherweise damit zusammenhängt, dass der cout-Befehl eine gewisse Zeit beansprucht, und somit die Seeds indirekt beeinflusst. Deshalb habe ich versucht an der selben Stelle wo im 2. Beispiel der cout-Befehl steht eine kurze Wartezeit einzubauen, jedoch war das Ergebnis ähnlich wie beim 1. Beispiel.

Programmieren, Programmierung, cplusplus, zufallsgenerator
4 Antworten

Meistgelesene Fragen zum Thema Zufallsgenerator