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
![:D](wcf/images/smilies/biggrin.png.pagespeed.ce.UPFXer8Yu2.png)
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...
![:(](wcf/images/smilies/sad.png.pagespeed.ce.R_Dlrl8CWi.png)
Gibt es nicht eine Möglichkeit, dass ganze etwas "kürzer und knapper" zu gestalten???