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

Klik hier om terug te gaan naar de vorige bladzijde.
  Trek zelf uw conclusie! Let daarbij ook op het eerste cijfer achter de komma! Mocht een willekeurig getal beginnen met 1 nul achter de komma, dan lijkt soms deze overeenkomst er niet te zijn, maar dat wordt veroorzaakt doordat in zo'n geval het willekeurige getal niet bestaat uit 16 cijfers, maar uit 17 tot 32 cijfers. Het zestiende cijfer kan dan naar boven zijn afgerond, omdat de PC niet meer dan 16 cijfers achter de komma kan weergeven.

De staart van deze getallen wordt dus niet willekeurig gevormd, maar de eerste acht cijfers wel.

Hieruit moge blijken dat het willekeurig produceren van getallen door de randomizer zijn beperkingen kent. Als er dus met de randomizer gewerkt moet worden, zal het met spelletjes misschien geen ramp zijn. Maar wanneer het bij de kansberekening er echt op aan komt, moeten deze beperkingen worden uitgesloten. Als dit laatste niet gebeurt, moet u er zich niet over verbazen dat een ondeugdelijk kaartverdelingsprogramma op een later tijdstip "toevallig" dezelfde kaartverdelingen produceert.

Klik hier om terug te gaan naar de vorige bladzijde.