Referenz - RANDOMIZE
Syntax: RANDOMIZE [Startwert][, Algorithmus]
Typ: Anweisung
Kategorie: Mathematik
RANDOMIZE initialisiert den Zufallsgenerator.
- 'Startwert' ist vom Typ DOUBLE und gibt den Initialwert für den Zufallsgenerator an. Falls dieser Wert ausgelassen wird, wird ein Wert basierend auf TIMER verwendet.
- 'Algorithmus' ist ein INTEGER-Wert, der den zu verwendenden Algorithmus bestimmt. Falls dieser Wert ausgelassen wird, wird der dialektspezifische Algorithmus verwendet.
Der erstellte Zufallsinitialwert ermöglicht der Funktion RND, Zufallszahlen zu generieren, und bestimmt den Algorithmus, welcher verwendet werden soll. Zulässige Werte für 'Algorithmus' sind:
- 0 - Es soll der dialektspezifische Algorithmus verwendet werden. Bei -lang fb ist dieser 3, bei -lang qb 4 und bei -lang fblite 1.
- 1 - Verwendet die rand()-Funktion der C runtime library. Die Zufallswerte sind hierbei plattformspezifisch.
- 2 - Ein performanter Algorithmus wird verwendet. Diese Methode sollte plattformunabhängig sein und erzeugt 32-bit Doublewerte mit einem annehmbaren Maß an Zufälligkeit.
- 3 - Verwendet den Mersenne-Twister-Algorithmus. Diese Methode sollte plattformunabhängig sein und erzeugt 32-bit Doublewerte mit einem hohen Maß an Zufälligkeit.
- 4 - Eine Funktion wird verwendet, die die gleiche Nummernfolge wie QBASIC erzeugen soll. Diese Methode sollte plattformunabhängig sein und erzeugt 24-bit genaue Zahlen mit einem geringen Maß an Zufälligkeit.
- 5 - Verwendet wie im dritten Algorithmus den Mersenne-Twist-Algorithmus, nur wird beginnend mit dem ersten Aufruf von RND alle 256 Aufrufe ein zusätzlicher Wert auf den Startwert aufaddiert. Dieser Wert entspringt unter Windows der CryptApi und unter Linux /dev/urandom. Dadurch soll ein noch besserer Zufallswert erreicht werden. Sollte diese Methode fehlschlagen, so wird der Standardwert des Mersenne-Twist-Algorithmus verwendet.
Für jeden Initialwert wird jeder Algorithmus eine bestimmte, reproduzierbare Reihenfolge von Zahlen generieren. Soll bei jedem Aufruf von RANDOMIZE eine andere Zahlenreihenfolge erstellt werden, sollte ein sich verändernder Initialwert übergeben werden - z. B. der Rückgabewert der Funktion TIMER. Wird 'Startwert' ausgelassen oder erhält er den Wert -1.0, dann wird ein auf TIMER basierender Startwert verwendet.
Beachten Sie: Wird TIMER als Initialwert öfter in einer Sekunde aufgerufen, werden immer dieselben Zahlen erstellt. Grundsätzlich ist es nicht nötig, RANDOMIZE öfter als einmal mit einem sich verändernden Übergabeparameter aufzurufen, da die Zahlenreihenfolge der späteren Aufrufe nicht zufälliger sind als die nach dem ersten Aufruf. In den meisten Fällen sollte der Mersenne-Twister-Algorithmus zu einer ausreichend zufälligen Reihenfolge von Zahlen führen, ohne dass der Initialwert zwischen RND-Aufrufen neu belegt werden müsste.
Beim Aufruf von RANDOMIZE mit dem QB-kompatiblen Algorithmus wird ein Teil der Zufallswerte aufbewahrt. Das bedeutet, dass bei mehrmaligen Aufrufen von RANDOMIZE mit demselben Initialwert nicht jedes Mal die gleiche Reihenfolge erzeugt wird. Um eine bestimmte Reihenfolge zu erhalten, muss RND mit einem negativen Übergabeparameter aufgerufen werden.
Beispiel:
'Die C-rand()-Funktion soll verwendet werden
Randomize , 1
'Gibt zehn Zufallszahlen aus
For i As Integer = 1 To 10
Print Rnd
Next
Sleep
Unterschiede zu QB:
Der Parameter 'Algorithmus' ist neu in FreeBASIC. QB hat nur einen Algorithmus (nachgebaut in FB im Algorithmus 4 und der Standardalgorithmus im Dialekt -lang qb).
Plattformbedingte Unterschiede:
Algorithmus 5 verwendet unter Windows die CryptApi, unter Linux /dev/urandom. Unter DOS ist der Algorithmus nicht vorhanden, hier wird bei Angabe des Wertes 5 der Standard-Algorithmus verwendet.
Unterschiede zu früheren Versionen von FreeBASIC:
Der Algorithmus 5 existiert seit FreeBASIC v0.24.
Unterschiede unter den FB-Dialektformen:
Der Standardalgorithmus hängt vom aktuellen Dialekt ab:
- -lang fb verwendet die 32-bit Mersenne-Twister-Funktion.
- -lang qb erzeugt dieselbe Ausgabe wie RND in QB.
- -lang deprecated und -lang fblite verwenden die C-Funktion rand(). Diese ergibt unter Win32 15-bit-Werte und unter Linux und DOS 32-bit-Werte.
Siehe auch:
RND, Mathematik
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|