VF_random | VD_random | VE_random |
VCF_random | VCD_random | VCE_random |
VI_random | VBI_random | VSI_random | VLI_random | VQI_random | |
VU_random | VUB_random | VUS_random | VUL_random | VUQ_random | VUI_random |
|
Funktion | gleichverteilte Zufallszahlen hoher Qualität |
|
Syntax C/C++ | #include <VFstd.h>
long VF_random( fVector X, ui siz, long seed, float MinVal, float MaxVal ); |
C++ VecObj | #include <OptiVec.h>
long vector<T>::random( long seed, T MinVal, T MaxVal ); |
Pascal/Delphi | uses VFstd;
function VF_random( X:fVector; size:UIntSize; seed:LongInt; MinVal, MaxVal:Single ): LongInt; |
|
CUDA-Funktion C/C++ | #include <cudaVFstd.h>
int cudaVF_random( fVector d_X, ui siz, long seed, float MinVal, float MaxVal );
int cusdVF_random( fVector d_X, ui siz, long seed, float *d_MinVal, float *d_MaxVal );
|
CUDA-Funktion Pascal/Delphi | uses VFstd;
function cudaVF_random( d_X:fVector; size:UIntSize; seed:LongInt; MinVal, MaxVal:Single ): IntBool;
function cusdVF_random( d_X:fVector; size:UIntSize; seed:LongInt; d_MinVal, d_MaxVal:PSingle ): 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 völlig beliebig gewählt werden. Aufeinander folgende Aufrufe mit demselben Wert von seed führen zu identischen Sequenzen. Für unterschiedliche Werte von seed sind die erzeugten Sequenzen miteinander unkorreliert.
Intern gebrauchen diese Funktionen für die kleineren Datentypen einen 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!
Ein long-Wert wird zurückgegeben, der als neuer seed-Wert für spätere Aufrufe verwendet werden kann. Dabei setzt der neue Aufruf allerdings nicht einfach die vorherige Serie fort, da der Generator sich zuerst intern erneut initialisieren muss. Wenn Fortsetzbarkeit der Serie gewünscht wird, verwende man statt dieser Funktion VF_randomLC.
Die CUDA-Versionen dieser Funktion geben keinen neuen seed-Wert zurück, sondern den üblichen cudaOptiVec-Fehlercode.
Es gibt keine VFcu_-Version, da die Zufallszahlen bei diesem Algorithmus ohnehin auf der CPU erzeugt werden. |
|
|
Rückgabewert | letzte intern generierte 32-bit-Zufallszahl; kann als neuer Startwert für spätere Aufrufe verwandt werden |
|
|