VF_randomLC | VD_randomLC | VE_randomLC |
VCF_randomLC | VCD_randomLC | VCE_randomLC |
VI_randomLC | VBI_randomLC | VSI_randomLC | VLI_randomLC | VQI_randomLC | |
VU_randomLC | VUB_randomLC | VUS_randomLC | VUL_randomLC | VUQ_randomLC | VUI_randomLC |
|
Funktion | gleichverteilte Zufallszahlen hoher Qualität |
|
Syntax C/C++ | #include <VFstd.h>
void VF_randomLC( fVector X, ui siz, long seed, float MinVal, float MaxVal, V_RANDOMLCSTATE *state ); |
C++ VecObj | #include <OptiVec.h>
void vector<T>::randomLC( long seed, T MinVal, T MaxVal, V_RANDOMLCSTATE *state ); |
Pascal/Delphi | uses VFstd;
procedure VF_randomLC( X:fVector; size:UIntSize; seed:LongInt; MinVal, MaxVal:Single; state:PV_RANDOMLCSTATE ); |
|
CUDA-Funktion C/C++ | #include <cudaVFstd.h>
int cudaVF_randomLC( fVector d_X, ui siz, long seed, float MinVal, float MaxVal, V_RANDOMLCSTATE *h_state );
int cusdVF_randomLC( fVector d_X, ui siz, long seed, float *d_MinVal, float *d_MaxVal, V_RANDOMLCSTATE *h_state );
|
CUDA-Funktion Pascal/Delphi | uses VFstd;
function cudaVF_randomLC( d_X:fVector; size:UIntSize; seed:LongInt; MinVal, MaxVal:Single; h_state:PV_RANDOMLCSTATE ): IntBool;
function cusdVF_randomLC( d_X:fVector; size:UIntSize; seed:LongInt; d_MinVal, d_MaxVal:PSingle; h_state:PV_RANDOMLCSTATE ): IntBool;
|
|
Beschreibung | X wird mit einer Sequenz von Pseudo-Zufallszahlen gefüllt. Innerhalb des durch MinVal und MaxVal begrenzten Bereiches (die Extremwerte eingeschlossen) sind alle Zahlen prinzipiell gleich wahrscheinlich. Lediglich durch die beschränkte Anzahl von Nachkomma-Stellen in den Fließkomma-Versionen entstehen größenabhängige Rundungseffekte, die aber praktisch meist keine Bedeutung haben.
Der Start-Parameter seed kann willkürlich gewählt werden, wobei ein Wert ungleich 0 Initialisierung des Generators und Start einer neuen Serie bewirkt, während ein Aufruf mit seed=0 und demselben state zur Fortsetzung der zuletzt generierten Serie führt. Aufrufe mit demselben Wert von seed ergeben identische Resultate; für verschiedene Werte von seed sind die Resultate unkorreliert.
Intern gebrauchen diese Funktionen für die kleineren Datentypen einen linear-kongruenten (daher der Namensteil "LC") 32-bit-Zufallszahlengenerator nach H.W. Lewis und für die größeren eine 64-bit-Variante, wobei zusätzliche Schritte (sog. "Bays-Durham shuffle") der vollständigen Vermeidung sequentieller Korrelationen dienen. So wird eine hohe statistische Qualität der Zufallszahlen erzielt, die diejenige von einfacheren Generatoren wie der C/C++-Funktion rand oder der Pascal-Funktion Random bei weitem übertrifft. Da dieser Algorithmus aber allgemein bekannt ist und aus einem gegebenen Abschnitt der generierten Serie von gewisser Länge der Zustand des Generators erschlossen werden kann (und damit die folgenden Zahlen vorhergesagt werden können), besitzen diese Funktionen keine kryptographische Eignung!
Als vereinfachte Form dieser Funktion steht VF_random zur Verfügung.
|
|
Beispiel C/C++ | #include <VFstd.h>
V_RANDOMLCSTATE MyState; // Speicherplatz für Generator-Zustand
VF_randomLC( X, siz/2, −1111, −1.0, +1.0, &MyState ); // Initialisierung mit seed ≠ 0 und erste Hälfte der Serie
VF_randomLC( X, siz-siz/2, 0, −1.0, +1.0, &MyState ); // Fortsetzung der Serie durch seed = 0
VF_randomLC( Y, siz, −1111, −1.0, +1.0, &MyState ); // identische Serie in Y wie in X, da identisches seed
VF_randomLC( Z, siz, 234567, −1.0, +1.0, &MyState ); // andere Serie in Z, da seed unterschiedlich
|
|
Beispiel Pascal/Delphi | uses VFstd;
var MyState: V_RANDOMLCSTATE; { Speicherplatz für Generator-Zustand }
VF_randomLC( X, siz div 2, −1111, −1.0, +1.0, @MyState ); { Initialisierung mit seed ≠ 0 und erste Hälfte der Serie }
VF_randomLC( X, siz-siz div 2, 0, −1.0, +1.0, @MyState ); { Fortsetzung der Serie durch seed = 0 }
VF_randomLC( Y, siz, −1111, −1.0, +1.0, @MyState ); { identische Serie in Y wie in X, da identisches seed }
VF_randomLC( Z, siz, 234567, −1.0, +1.0, @MyState ); { andere Serie in Z, da seed unterschiedlich }
|
|
|
|
|