011
09.09.2004, 21:10 Uhr
virtual
Sexiest Bit alive (Operator)
|
@Windalf Die von Dir zitierte Formel ist aber nur die Hälfte der Wahheit: Die Zufallsgeneratoren, die ich kenne arbeiten intern mit einer Formel der Art die Du sie nennst, das ist richtig. Aber, und das solltest Du nicht verschweigen: Sie geben nicht etwa X(n) oder so zurück, sondern nur einen Teil (eben die unteren Bits). So ist es ja auch kein zufall, daß rand() nur einen Wertebereich von 15 Bit hat, denn intern wird eben die von Dir genannte Formel verwendet, aber eben auf 32 Bit und nur die unteren Bits zurückgeliefert.
Übrigens arbeitet der Zufallsgenerator auf meinem System intern mit 64 Bit und extern sind 31 Bit sichtbar. Und wenn ich folgendes Programm laufen lasse:
C++: |
#include <iostream> #include <cstdlib>
int main() { srand(time(NULL));
int anzahl = 0; int jetzt = -1; int davor = -2;
while(anzahl<10) { jetzt = rand(); if (jetzt==davor) { std::cout<<jetzt<<std::endl; anzahl++; } davor = jetzt; } }
|
Dann läuft es nicht ewig (wenngleich recht lange), die Ausgabe, seitdem ich angefangen habe zu schreiben:
Code: |
321423738 1673865205
|
Sorry, aber das was Du schreibst ist nicht korrekt, und das sollte auch vor dem Hintergrund einleutchen, den ich Anfangs erwähnte.
Wo Du allerdings recht hast, ist die Sache wenn Du Modulo N rechnest: Wenn ld(N) keine ganze Zahle ist, (also N keine 2er Potenz ist), dann hast Du keine Gleichverteilung mehr. In diesem Zusammenhang sei darauf hingewiesen, daß meine eingangs vorgestellten Funktionen dies aber niemals tun.
PS. Es sind noch folgende Zahlen dazu gekommen:
Zufall, nehme ich an -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) |