Zufallszahlen

Gast #545731
Lesenswert?

Ich möchte einen Zufallszahlengenerator nach der linearen 
Kongruenzmethode für mein Programm schreiben. Nun habe ich folgendes 
Problem.

Zufallszahlen: 1-12;
int rand (int d)
{
int b=3,m=11;
d=((d*b+1)%m)+1;


return d;

}

Es werden Zahlen von 1 - 12 erzeugt aber die Zahlen wiederholen sich 
nach der 4 oder 5 Zahl(gleiches Muster)

Brauche aber die Zahlen von 1-12 und am Besten wäre es wenn sie wirklich 
zufällig(kein Muster)
Gast #599212
Lesenswert?

typedef unsigned long uint32;
typedef signed long int32;

#define  M  ((1U<<31) -1)
#define  A  48271
#define  Q  44488    // M/A
#define  R  3399    // M%A; R < Q !!!

static uint32 SEEDED_RANDOM=314235;

static int rand_r(uint32* seed)
{   int32 X;

    X = *seed;
    X = A*(X%Q) - R * (int32) (X/Q);
    if (X < 0)
  X += M;

    *seed = (uint32)X;
    return (int)X;
}
void randomize(uint32 seed)
{
  SEEDED_RANDOM=seed;
}
int random(void)
{
  SEEDED_RANDOM+=_TIMER;                     // TIMER ist auch vom TYP 
uint32 und darf
  return rand_r(&SEEDED_RANDOM);             // gerne im interrupt oder 
wie auch immer
} 
// inkrementiert werden!



int main(void)
{
       randomize((int32)random);
       printf("%d zufall\n",random());
       return 0;
}


Natürlich nicht optimiert. Aber es funktioniert ganz gut...

Gruß Xident

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