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
5.5K
Verwijderde gebruiker
14 jaar geleden
Zie de gerelateerde vraag: http://www.goeievraag.nl/vraag/bepaalt-rekenmachine-cijfer-verschijnt-random.10832
Verwijderde gebruiker
14 jaar geleden
Laat een random tijd een subroutine lopen. Stop deze routine en sla de waarde op.
laat de zelfde subroutine weer lopen en sla ook deze waarde op.
Vermenigvuldig beiden met de datum en dan met elkaar.
Volgens mij heb je dan een redelijk willekeurig nummer.
Verwijderde gebruiker
14 jaar geleden
Vraag je ook af hoe random jouw nummer moet zijn.

Heb je meer informatie nodig om de vraag te beantwoorden? Reageer dan hier.

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.
(Lees meer...)
Verwijderde gebruiker
14 jaar geleden
Verwijderde gebruiker
14 jaar geleden
Welke methoden?
Verwijderde gebruiker
14 jaar geleden
Zie toevoeging, die in inmiddels geplaatst heb :).
Verwijderde gebruiker
14 jaar geleden
Nee die zal er ook nooit komen, want die is afhankelijk van te veel dingen. Jouw verhaal met de thermometer is vanwege de nauwkeurigheid veel te duur. En bovendien is jouw voorbeeld zeker NIET random
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.
(Lees meer...)
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.
(Lees meer...)
Verwijderde gebruiker
14 jaar geleden
Verwijderde gebruiker
14 jaar geleden
Voor de techneuten onder ons +1
Verwijderde gebruiker
14 jaar geleden
Dus wat ze doen is een seed ergens van nemen (bijv. de tijd), daar dan continu een formule op los laten, en zodra je een random getal opvraagt word die dmv het getal dat er dan uit de formule komt rollen berekend? Dus tijd is bijvoorbeeld 16:06:36, zodra het programma wordt gestart, dan doet hij bijv. iedere keer 36*3.31, en dan daar de laatste 2 getallen van (gesimplificeerd, natuurlijk), en als je dan een getal tussen 1 en 10 wilt, is het bijvoorbeeld het laatste getal van het nummer dat de formule had berekend (met natuurlijk allemaal veel moeilijkere algoritmes en zo)? +

Weet jij het beter..?

Het is niet mogelijk om je eigen vraag te beantwoorden Je mag slechts 1 keer antwoord geven op een vraag Je hebt vandaag al antwoorden gegeven. Morgen mag je opnieuw maximaal antwoorden geven.

0 / 5000
Gekozen afbeelding