| |
De
werking van de randomizer
Elke
computer is uitgerust met een functie om reeksen willekeurige getallen
te produceren. Bij spelletjes wordt hiervan veelvuldig gebruik gemaakt
om onverwachte effecten te bewerkstelligen. Deze computerfunctie moet op
gang gebracht worden door een "ent-getal" op te geven. Zo'n ent-getal moet
minstens -32768 zijn en kan hoogstens +32767 zijn. Er zijn dus (inclusief
de nul) 65536 mogelijkheden om de computer zo'n reeks willekeurige getallen
te laten maken.
Vaak
laten programmeurs het tijdstip van de dag het ent-getal bepalen. De computer
houdt namelijk ook bij hoeveel seconden na middernacht zijn verstreken.
Er zijn per dag 24 x 60 x 60 = 86400 seconden te gaan. Dat zijn er dus
veel meer dan dat er ent-getallen opgegeven kunnen worden. Gebruikt een
programmeur alleen deze tijd-functie van de computer, dan gebruikt hij
geen enkel negatief ent-getal en daarmee maar de helft van de mogelijkheden
van de computer.
De
reeks willekeurige getallen bestaat uit breuken tussen 0 en 1. De doorsnee
PC (gemakshalve ga ik hier uit van een PC met Pentium chip) kan niet verder
gaan dan het gebruiken van breuken die bestaan uit 16 tekens (de tiendelige
"punt" meegeteld). Verder bestaan de geproduceerde breuken in 31% van de
gevallen uit getallen die uit meer dan 16 cijfers achter de tiendelige
"punt" bestaan. Met programmeertrucjes is dat te achterhalen. 1 op
de 1000 getallen is zelfs langer is dan 30 cijfers na de tiendelige "punt".
Dat zijn dan steeds de breuken die kleiner zijn dan 0,01.
De
generator van willekeurige getallen in een PC kan dus op 65536 verschillende
manieren worden opgestart. Iedere manier maakt een andere reeks willekeurige
tiendelige breuken. Maar deze reeksen zijn niet eindeloos. Na 16.777.217
getallen te hebben gemaakt, begint de reeks weer bij zijn begin (een enkele
uitzondering daargelaten). Van de 65536 ent-getallen zijn deze reeksen
even lang; ook bij de uitzonderingsgevallen bedoeld in de vorige zin. Als
de randomizer wordt gebruikt om 52 speelkaarten te verdelen, is voor iedere
kaart een willekeurig getal nodig. Met de reeks willekeurige getallen
die met een enkel ent-getal wordt geproduceerd, kunnen dus 322638 spellen
worden gemaakt en blijven er 36 willekeurige getallen over van deze reeks.
Daarna wordt de reeks opnieuw afgedraaid en krijgt het 322639ste spel dus
de laatste 36 getallen plus de eerste 12 van de reeks toebedeeld. Dat levert
dus een ander spel op dan het allereerste spel van de reeks. Als de reeks
voor de tweede maal is gebruikt worden er 322639 gemaakt en blijven er
20 getallen over voor een derde maal gebruiken van de reeks, zonder dat
dezelfde spellen als een keer daarvoor verschijnen. U kunt zich voorstellen
dat - als de computer opdracht krijgt het 1.000.001ste t/m het 1.000.028ste
spel uit een reeks met een bepaald ent-getal af te drukken - het
enige tijd duurt voordat het willekeurige startgetal is bereikt. Bovendien
heb ik nog nooit gehoord van een programma dat kaartverdelingen maakt en
dat op deze wijze met de mogelijkheden van de randomizer omspringt. En
hier ligt de grondoorzaak van het falen van kaartschudprogramma's.
Maar
eerst verder met de werking van de randomizer.
De
willekeurigheid waarmee geproduceerd wordt, betreft niet alleen de aard
van de getallen (even/oneven, priemgetal, ..macht van.., product van...,
etc.), maar ook blijkt dat het aantal gebruikte enen ongeveer even groot
is als het aantal gebruikte tweeën, drieën, vieren, etc. Verder
blijkt de willekeurigheid ook elk tweede getal te betreffen, en elk derde
getal, etc. In feite gaan dus de cijfertekens die eventueel na het 16e
cijfer worden geproduceerd, de mist in. Dat is geen ramp. Misschien zelfs
juist een uitkomst. Vergelijkt u maar de eerste tien willekeurige getallen
uit de reeksen gemaakt door de kleinste vier ent-getallen:
|
-32768
|
-32767
|
-32766
|
-32765
|
|
0,0038873553276062
0,1384044885635376
0,2645772099494934
0,7343866825103760
|
0,2588159441947937
0,1704937219619751
0,7776845097541809
0,3669397830963135
|
0,2558862566947937
0,1792827844619751
0,7513173222541809
0,4460413455963135
|
0,2529565691947937
0,1880718469619751
0,7249501347541809
0,5251429080963135
|
U ziet dat van de 16 cijfers
na de komma de laatste zes dezelfde zijn bij die ent-getallen, die groter
zijn dan het kleinst toegestane. Maar bij het zevende tot en met het tiende
cijfer is ook iets opvallends aan de hand. Bij de oneven ent-getallen scheelt
de waarde van het door deze vier cijfers gevormde getal steeds 1250. En
bij de even ent-getallen is het verschilt tussen deze getallen 6250. Dat
wil zeggen: bij de oneven getallen uit de reeks, want bij de even getallen
is dat weer juist andersom.
Wat doet de randomizer als
er een onjuist ent-getal wordt opgegeven? Als voorbeeld: van de
drie kleinste ent-getallen plus het eerste te kleine ent-getal
de eerste vier getallen uit hun reeks:
|
-32768
|
-32769
|
-32770
|
-32771
|
|
0,0038873553276062
0,1384044885635376
0,2645772099494934
0,7343866825103760
|
0,5053521990776062
0,1340099573135376
0,7777608036994934
0,6948359012603760
|
0,0068170428276062
0,1296154260635376
0,2909443974494934
0,6552851200103760
|
0,5082818865776062
0,1252208948135376
0,8041279911994934
0,6157343387603760
|
U kunt zelf genieten van de
verschillen tussen de blauw getallen op dezelfde regel en van de rode en
paarse getallen. Ditzelfde gegeven zien we ook bij de andere aansluitende
ent-getallen
Nog iets merkwaardigs.
De aansluiting van de kleinste
bij de grootste ent-getallen:
|
-32768
|
+32768
|
-32769
|
+32769
|
|
0,0038873553276062
0,1384044885635376
0,2645772099494934
0,7343866825103760
0,4674753546714783
0,7781580686569214
0,5037637352943420
0,7914853096008301
|
0,5038873553276062
0,6384044885635376
0,7645772099494934
0,2343866825103760
0,9674753546714783
0,2781580686569214
0,0037637352943420
0,2914853096008301
|
0,5053521990776062
0,1340099573135376
0,7777608036994934
0,6948359012603760
0,0861276984214783
0,4222010374069214
0,0716348290443420
0,5878720283508301
|
0,0053521990776062
0,6340099573135376
0,2777608036994934
0,1948359012603760
0,5861276984214783
0,9222010374069214
0,5716348290443420
0,0878720283508301
|
|
|