i++)
int unew = seeds[jptr] - seeds[iptr] - carry; if (unew < 0)
unew += two24; carry = 1;
else carry = 0; seeds[iptr] = unew; iptr--; if (iptr < 0) iptr = 23; jptr--; if (jptr < 0) jptr = 23; rvec[i] = unew;
gdzie inicjalizacja wygląda : void seet_seeds(long int seed, int u[]) { int i;
/* This is the initialization algorithm of F. James, widely in use for RANLUX. */
for (i = 0; i < 24; i++)
unsigned long int k = seed / 53668; seed = 40014 * (seed - k * 53668) - k * 12211; if (seed < 0)
seed += 2147483563;
u[i] = seed % two24;
iptr = 23; jptr = 9; carry = 0; } wołanie : void rcarry_test() { const int SIZE = 5; int rvec[SIZE]; int seeds; seet_seeds(314159265, seeds);//dla 314159265 daje 9056646 12776696 1011656 13354708 5139066 RCARRY(rvec, SIZE, seeds); for (int i = 0; i < SIZE; i++) printf("%d ", rvec[i]); }
Własności Algorytm jest szybki (pomiary w Visual C++ na Intel i3 3.6 GHz: 15.7 takta), jednak nie przechodzi testu urodzinowego (diehard_birthdays w pakiecie DieHarder). Stał się on podstawą algorytmu RANLUX.
Przypisy
Kategoria:Generowanie liczb losowych