Start eines Zufallszahlengenerators C ++ [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Wie erstelle ich eine Zufallszahl in C ++? 10 Antworten

Ich habe zwei Fragen.

Welche anderen Möglichkeiten gibt es, um einen Pseudozufallszahlengenerator in C ++ zu erzeugen, ohne ihn zu verwenden?srand(time(NULL))?

Der Grund, warum ich die erste Frage gestellt habe. Ich verwende momentan Zeit als Startwert für meinen Generator, aber die Zahl, die der Generator zurückgibt, ist immer dieselbe. Ich bin mir ziemlich sicher, dass der Grund dafür ist, dass die Variable, in der die Zeit gespeichert wird, zu einem gewissen Grad abgeschnitten wird. (In einer Warnmeldung heißt es: "Implizite Konvertierung verliert an Ganzzahlgenauigkeit: 'time_t' (auch bekannt als 'long') in 'unsigned int') Ich vermute, dass dies bedeutet, dass sich mein Same im Wesentlichen erst im nächsten Jahr ändern wird Für meine Zwecke würde es gut funktionieren, Zeit zu verwenden, da mein Samen gut funktioniert, aber ich weiß nicht, wie ich diese Warnung loswerden kann.

Ich habe diese Fehlermeldung noch nie zuvor erhalten, daher gehe ich davon aus, dass sie etwas mit meinem Mac zu tun hat. Es ist 64-Bit OS X 10.8. Ich benutze auch Xcode zum Schreiben und Kompilieren, aber ich hatte keine Probleme auf anderen Computern mit Xcode.

Bearbeiten: Nachdem ich das gespielt und genauer untersucht hatte, entdeckte ich einen Fehler, den 64-Bit-Macs haben. (Bitte korrigieren Sie mich, wenn ich mich irre.) Wenn Sie versuchen, Ihren Mac mit einer Zufallszahl zwischen 1 und 7 auswählen zu lassentime(NULL) Als Samen erhalten Sie immer die Nummer vier. Immer. Am Ende habe ich verwendetmach_absolute_time() um meinen Randomizer auszusäen. Offensichtlich beseitigt dies jede Portabilität meines Programms ... aber ich bin nur ein Hobbyist.

Edit2: Quellcode:

#include <iostream>
#include <time.h>

using namespace std;

int main(int argc, const char * argv[]) {

srand(time(NULL));

cout << rand() % 7 + 1;

return 0;
}

Ich habe diesen Code erneut ausgeführt, um ihn zu testen. Jetzt gibt es nur noch 3 zurück. Dies muss etwas mit meinem Computer zu tun haben und nicht mit C ++.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage