Welche Startwerte für Mersenne Twister Algorithmus ?

Gast #3896957
Lesenswert?
• ▲
▼
Hallo,

weiss vielleicht jemand, wie ich den oder die Startwerte für diesen 
Algorithmus ändern kann bzw welche das sind? Ich möchte die Funktion in 
2 aufteilen, so dass sich immer andere Zufalls Folgen ergeben, je 
nachdem welcher Wert aus dem A/D Wandler ausgelesen wird.  Da ich nur 16 
Bit Zahlen brauche nehme ich den Wert unten % 0xFFFF, hoffe das ist kein 
Problem für die Verteilung der Zahlen. Die Periodendauer ist 10^240, 
also schon ganz nett.

Gruss,
Christian


1
// Mersenne - Twister Algorithmus
2
uint32_t TT800(uint16_t range) {
3
#define N  25
4
#define M   7
5
   static const uint32_t A[2] = { 0, 0x8ebfd028 };
6
   static uint32_t y[N];
7
   static int index = N+1;
8
   uint32_t  e;
9

10
   if (index >= N) {
11
     int k;
12
     if (index > N) {
13
        unsigned r = 9, s = 3402;
14
        for (k=0; k<N; ++k) {
15
          r = 509845221 * r + 3;
16
          s *= s + 1;
17
          y[k] = s + (r >> 10);
18
        }
19
     }
20
     for (k=0; k<N-M; ++k)
21
        y[k] = y[k+M] ^ (y[k] >> 1) ^ A[y[k] & 1];
22
     for (; k<N; ++k)
23
        y[k] = y[k+(M-N)] ^ (y[k] >> 1) ^ A[y[k] & 1];
24
     index = 0;
25
   }
26

27
   e = y[index++];
28
  /* Tempering */
29
   e ^= (e <<  7) & 0x2b5b2500;
30
   e ^= (e << 15) & 0xdb8b0000;
31
   e ^= (e >> 16);
32
   return (e % range);
33
#undef N
34
#undef M

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren