Hét vraag- en antwoordplatform van Nederland

Hoe kiest een computer een willekeurig getal?

Is dit op basis van tijd, en laat hij daarop een algoritme los?
Maar als je een computer de opdracht geeft om 500 willekeurige getallen te kiezen (dus heel snel na elkaar), zijn deze wel 'echt' willekeurig, dus is het dan op basis van nanoseconden oid?

Toegevoegd na 25 minuten:
Ik snap dus dat het 'niet' kan, omdat een computer alleen maar voorgeprogrammeerde dingen kan. Maar mijn vraag is dus, hoe doen die scripttalen waar die functie in zit, of de site (random.org), het dan?

Verwijderde gebruiker
14 jaar geleden
Geef jouw antwoord
0 / 2500
Geef Antwoord

Het beste antwoord

De computer kan een true random getal krijgen door er hier eentje van te plukken:
http://www.random.org/

Een werkelijk random getal genereren louter op basis van de tijd in milliseconden gerekend, kan inderdaad niet.
Maar er zijn wel methoden om wel een random getal te genereren.

Toegevoegd na 10 minuten:
True random kan bijv. op basis van 'atmospheric noise':
http://en.wikipedia.org/wiki/Atmospheric_noise
(Een goede Nederlandse vertaling kan ik even niet opkomen...)
Je computerprogrammaatje moet dus bijv. contact maken met random.org een true random getal te genereren. In theorie kan een true random generator ook wel in een PC worden ingebouwd.
Stel, je neemt een digitale thermometer die de temperatuur tot in 20 decimalen kan meten. Het gaat er daarbij niet om dat dat ook precies die mate van precizie heeft (dat 't _werkelijk_ 27,778738284617367232 graden is) - dat maakt niet uit: als 't maar een meetmechanisme heeft die werkelijk onderscheid kan maken tussen 27,778738284617367232 en 27,778738284617367231 c.q. dat 't werkelijk alle waarden daartussen in kan genereren. De temperatuur gaat, als je in 20 decimalen achter de komma kijkt, gigantisch snel op en neer - en volstrekt onvoorspelbaar. Een vlieg die 10m. verderop langs vliegt heeft er al invloed op.
Die temperatuur zou je ook weer kunnen combineren met bijv. de luchtsnelheid in 20 decimalen en dan nog gecombineerd met een getalletje van random.org... Geen hacker die dan nog een patroon ziet.

Misschien zijn er al normale PC's die een true random generator aan boord hebben - maar ik heb er nog niet van gehoord.
Verwijderde gebruiker
14 jaar geleden

Andere antwoorden (2)

Nee. Een werkelijk willekeurig getal genereren is iets wat een computer niet kan. De programmeur moet een trucje verzinnen om de computer een random getal te laten genereren. Meestal word daar wel de datum en de tijd voor gebruikt. Een computer kan niet iets willekeurigs doen. De programmeur moet dat er in bouwen. In de meeste ontwikkel software zit wel een random number functie in gebouwd. Daar hoef je je dus ook niet druk over te maken. Iedereen die roept dat het wel kan, en een voorbeeldje alat zien, maakt gebruik van die functie.
Verwijderde gebruiker
14 jaar geleden
Echte random getallen kun je niet maken. Het JPL (Jet Prop Lab van Bell) genereert random getallen voor hi end doeleinden uit ruimte geruis (background noise van de Big Bang)

Pseudeo random getallen zijn niet en wil je ook niet hardware matig hebben, maar software matig. Dat gaat als volgt: je kiest een seed value, en daarmee start je de randomgenerator in de software, daarna vraag je pseudo randomnummers uit. De kans dat je eenzelfde getal krijgt is uitermate klein maar wel aanwezig. Het voordeel boven echte random getallen is, dat wanneer dezelfde seed ingeeft, dat je dan opeenvolgend weer dezelfde getallen worden gegenereerd. Het proces herhaalt zich. Dat is uiterst belangrijk voor het testen van software.

Meestal heeft de software ook een seed generator, die zich baseert op het macnummer van de pc en de tijd van de klok van de pc. Je kunt dus in een groot netwerk, dezelfde applikatie starten zonder in de problemen te komen.

Ik zelf gebruikte altijd voor het genereren van sleutel voor Oracle en MS SS in Delphi (misschien een beetje technisch, maar goed om je een indruk te geven):
bij het openen van de applikatie om de randomgenerator initialeren:

randomize; // zet de randomgenerator aan
Randseed := ((Randseed shl 8) or
getcurrentprocessid) xor gettickcount;

en als ik een key moest hebben:

result := IntToHex(Random($FFFFFFFF), 8) +
IntToHex(Random($FFFFFFFF), 8)

In een applicatie heb ik inmiddels miljoenen keys op deze wijze gegenereerd (mooi 16 lang) en nog nooit een dubbele gehad, want dan krijg je meteen een primary keyviolation error.
Verwijderde gebruiker
14 jaar geleden
Deel jouw antwoord
0 / 2500
Geef Antwoord
logo van Kompas Publishing

GoeieVraag.nl is onderdeel van Kompas Publishing