Kommt jez n bisschen spät aber egal: Also es ist tatsächlich blöd, dass immer wieder die gleichen Zahlen hereauskommen, wenn ich mein Proggi neu starte....
http://de.wikipedia.org/wiki/Mersenne-Twister
ööööhm....WAS?????? Sorry aber damit kann ich nun garnix anfangen
Das ist momentan noch etwas zu hoh für mich(14).
Ich hab mich mal auf die suche nach fertigen Bibliotheken gemacht, aber da kommt immer nur soetwas:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
unsigned mersenne_twister(void) {
const int N = 624;
const int M = 397;
const unsigned A[2] = { 0, 0x9908b0df };
const unsigned HI = 0x80000000;
const unsigned LO = 0x7fffffff;
static unsigned y[N];
static int index = N+1;
if (index >= N) {
if (index > N) {
// initialisiere y mit Pseudozufallszahlen:
unsigned r = 9, s = 3402;
for (int i=0 ; i<N ; ++i) {
r = 509845221 * r + 3;
s *= s + 1;
y[i] = s + (r >> 10);
}
}
unsigned h;
for (int k=0 ; k<N-M ; ++k) {
h = (y[k] & HI) | (y[k+1] & LO);
y[k] = y[k+M] ^ (h >> 1) ^ A[h & 1];
}
for (int k=N-M ; k<N-1 ; ++k) {
h = (y[k] & HI) | (y[k+1] & LO);
y[k] = y[k+(M-N)] ^ (h >> 1) ^ A[h & 1];
}
h = (y[N-1] & HI) | (y[0] & LO);
y[N-1] = y[M-1] ^ (h >> 1) ^ A[h & 1];
index = 0;
}
unsigned e = y[index++];
// tempering:
e ^= (e >> 11);
e ^= (e << 7) & 0x9d2c5680;
e ^= (e << 15) & 0xefc60000;
e ^= (e >> 18);
return e;
}
|
Ne erläuterung steht nichtmal ausführlich bei wikipedia...
Gibt es nicht eine Möglichkeit, dass ganze etwas "kürzer und knapper" zu gestalten???