RANMAR
RANMAR jest algorytmem opisanym przez Marsaglię i Zamana[1] w 1987 roku.
Operację definiujemy następująco: = {if x>= y then x-y else x-y+1}.Operacja zdefiniowana jest na liczbach rzeczywistych z przedziału [0,1) każda z 24-bitową częścią ułamkową. Jest ona używana do produkcji opóźnionej sekwencji Fibonacciego oznaczonej przez F(r,s,). Jest to sekwencja x1,x2,x3,...liczb rzeczywistych, zdefiniowanych przez xn = xn-r xn-s. W algorytmie wybrano r=97,s=33. Algorytm ten samodzielnie nie przechodzi testu Birthday-Spacings, generatory opóźnionego Fibonacciego nie przechodzą tego testu chyba że opóźnienie r jest większe niż 500, lub powiedzmy binarna operacja jest operacją mnożenia nieparzystych liczb całkowitych modulo 2k. Aby generator mógł przejść wszystkie testy, łączymy go z drugim generatorem:
- cn = cn-1 (7654321 / 16777216)
gdzie = {if c>=d then c-d, else c-d+16777213 / 16777216 } a 16777213 = 224-3 - liczba pierwsza. Inicjujemy c0 = 362436 / 16777216
RMARIN
Należy teraz zainicjować tablicę 97 początkowych liczb. Będą wygenerowane algorytmem o nazwie RMARIN. Ponieważ będą generowane raz na początku, nie musimy się zbytnio troszczyć o szybkość generatora. Mamy dwa ciągi:
- pierwszy y1,y2,y3,y4,...gdzie yn = yn-3*yn-2*yn-1 mod 179
- drugi z1,z2,z3,z4,...gdzie zn = 53*zn-1 + 1 mod 169
Następnie bierzemy iloczyn elementów yn i zn, a następnie szósty bit licząc od najmłodszego: bi = {if ynzn mod 64 <32 then 0 else 1}. Ponieważ zostały wybrane małe liczby modulo jak 179 i 169, mamy pewność, że dokładność mnożenia będzie wystarczająca.
Przykład RMARIN
Pierwszy ciąg inicjujemy liczbami 12, 34 i 56 drugi liczbą 78.
- y1= (y{-2}*y{-1}*y0) mod 179 =(12*34*56) mod 179 = 22848 mod 179 =115
- z1 = (53*z0+1) mod 169 = (53*78+1) mod 169 = 4135 mod 169 = 79
- y1*z1 = 9085
- binarnie 9085 = 0010 0011 0111 1101
- szósty bit licząc od najmłodszego to 1
- y2 = (34*56*115) mod 179 = 218960 mod 179 = 43
- z2 = (53*79+1) mod 169 = 4188 mod 169 = 132
- y2*z2 = 5676 = 0001 0110 0010 1100
- szósty bit licząc od najmłodszego to 1
- y3 = (56*115*43) mod 179 = 7525 = 7
- z3 = (53*132+1) mod 169 = 6997mod 169 = 68
- y3*z3 = 476 = 0001 1101 1100
- szósty bit licząc od najmłodszego to 0
Kolejne bity: 110.. aż w końcu powstanie liczba 13697435 = binarnie 1101 0001 0000 0001 1001 1011
Liczby kolejno :
- u1= 13697435
- u2= 3833429
- u3= 12353926
- u4= 2287754
Oczywiście przesunięte o 24 bity tworząc liczby zmiennoprzecinkowe z przedziału [0,1)
Przykład RANMAR
Z pierwszego ciągu:
- u97(14606645) - u33(3168599) = 11438046
- u96(16298670) - u32(15057436) = 1241234
- u95(15616920) - u31(6626452) = 8990468
- u94(3474722) - u30(9897761) = 10354177
- u93(1183983) - u29(13996856) = 3964343
Z drugiego ciągu:
- 9485328
- 1831007
- 10953899
- 3299578
- 12422470
Łącząc je:
- 11438046-9485328 = 1952718
- 1241234-1831007+40962 = 16187443
- 8990468-10953899+40962 = 14813785
- 10354177-3299578 = 7054599
- 3964343-12422470+40962 = 8319089
Przypisy
- ↑ Toward a universal random number generator. [dostęp 2010-06-10]. [zarchiwizowane z tego adresu (2010-06-10)].
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.