Ich bin relativ neu in Fortran und versuche, die RANDOM_NUMBER
und RANDOM_SEED
Unterprogramme zu verstehen. Der folgende Code produziert fortwährend die gleiche Folge von Zufallszahlen, obwohl ich den Generator außerhalb des DO LOOP
am Anfang des Programms setze. HierZufallsgenerator erzeugt die gleiche Sequenz, obwohl es gesät ist
1 PROGRAM TEST
2
3 IMPLICIT NONE
4
5 INTEGER :: I, OUTPUT
6 REAL :: R
7
8 CALL RANDOM_SEED()
9
10 DO I=1, 10
11 CALL RANDOM_NUMBER(R)
12 OUTPUT = I*R
13 PRINT *,'Random number ', I, ' = ', OUTPUT
14 END DO
15
16 END PROGRAM TEST
ist der Ausgang, wenn ich den Code ausführen
Random number 1 = 0
Random number 2 = 1
Random number 3 = 2
Random number 4 = 2
Random number 5 = 1
Random number 6 = 2
Random number 7 = 0
Random number 8 = 0
Random number 9 = 3
Random number 10 = 3
Ich erhalte diese genaue Reihenfolge jedes Mal, wenn ich den Code ausführen. Ich habe sogar versucht, neu zu kompilieren, um zu sehen, ob der Generator zur Kompilierzeit neu seed.
eine schnelle Google-Suche kehrt tun: Wenn random_seed ohne Argumente aufgerufen wird, wird es zu einem Standardzustand initialisiert. Es scheint, dass Sie wahrscheinlich jedes Mal dieselbe Zufallszahlenfolge erhalten würden, wenn Sie in den Parametern nichts liefern. – DragonYen
Ya Ich habe diesen Beitrag auch gesehen, aber ich habe dann weiter gelesen (zum Beispiel in einem Intel-Forum), dass wenn Sie random_seed ohne Argument aufrufen, der Computer das Datum/die Zeit abrufen wird, um sie standardmäßig zu verwenden. Meine Interpretation von diesem war, dass, wenn Anruf RANDOM_SEED ohne Argument der Computer automatisch –
@ rowed-rook, ich denke, es hängt von dem Computer – Jodrell