Randomize, RND, Timer() , (@Onur, Opawinni)
08.05.2024 17:16:08
peter
Mich hat diese ganze Thematik keine Ruhe gelassen und daher habe ich noch einige Versuche unternommen.
Der wiederholte Aufruf von Randomize innerhalb einer Schleife ist nur dann problematisch , wenn die Abarbeitung sehr schnell geht. Auf meinem Rechner hat die Timer() Funktion eine Auflösung von 3,9 Millisekunden (auch wenn sie als Single defniert ist).
Sub TestTimer()
Dim c As Long
Dim t As Single
c = 0
t = Timer()
Do
c = c + 1
Loop Until (Timer() - t) > 0
Debug.Print c, (Timer() - t)
End Sub
Liefert als Ergebnis: 21504 3,90625E-03
Wobei die Anzahl der Durchläufe stark variert.
Der wiederholte Aufruf von Randomize mit einem fixen Startwert liefert immer genau 256 unterschiedliche Werte für die RND Funktion. Dannach beginnt das Spiel von vorne.
Sub testRandomize()
Dim i As Long
Dim z() As Long
ReDim z(9999, 1)
For i = 0 To 9999
Randomize 1
z(i, 0) = Int(Rnd * 1000)
Next
Range("A1").Resize(10000, 1) = z
End Sub
Hier scheint intern ein Zähler mitzulaufen.
Wenn nun wie Opawinni's Beispiel die RND Funktion öfters als 256 mal innerhalb von 3.9 Millisekunden aufgerufen wird, kommt es zu diesen Wiederholungen.
Das Thema ist zwar rein akademisch, eure Meinung dazu würde mich trotzdem interessieren.
Peter
Anzeige