Hoe creeert een computer een random getal

Pagina: 1
Acties:
  • 421 views sinds 30-01-2008
  • Reageer

  • Koeniepoenie
  • Registratie: Oktober 2003
  • Laatst online: 14-11 13:12
Omdat ik nogal eens aan het programmeren ben, vroeg ik me af hoe een computer een random getal laat generen.
Ik heb de search gebruikt, en vond een topic over Computers en random getallen, en nog een over willekeurigheid bestaat. Maar dat gaf niet echt een goed antwoord op mijn vraag.

Over willekeur heeft ieder zijn ideeen natuurlijk, maar ik ben overtuigd van het feit dat willekeurigheid niet bestaat, hoogstens in de kwantummechanica, en dus kon ik me niet bedenken hoe een computer een 'random' getal maakt.

Want een computer kan nou eenmaal niet zeggen van 'laat ik nu die eens nemen'. Het moet een bepaald patroon volgen, maar welke?

[ Voor 8% gewijzigd door Koeniepoenie op 16-08-2004 21:34 ]

Parse error: syntax error, unexpected GOT_USER in https://gathering.tweakers.net on line 1337


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 26-12 16:48

NMe

Quia Ego Sic Dico.

Willekeurigheid bestaat niet voor computers. Als je in Pascal of C bijvoorbeeld een random getal laat maken zonder eerst te randomizen, dan krijg je steeds als je het programma opnieuw opstart dezelfde waarden.

Hoe je een goed semi-random getal maakt heb ik ooit geweten, maar nu niet meer. Er zijn in ieder geval leuke formules voor, die je op Google vast kan vinden.

Willekeurigheid bestaat dus wel, alleen snapt een computer dat niet. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Johnny
  • Registratie: December 2001
  • Laatst online: 11:08

Johnny

ondergewaardeerde internetguru

Het maken van random getallen is inderdaad een van de moeilijkste dingen die er is.

Als je programmeert zal de computer vaak het random getal op de huidige datum en tijd baseren, en daar nog wat andere omgevingsvariablen en daar berekeningen op los laten.

Vaak is het ook mogelijk om een zogenaamde "seed" op te geven, een extra getal dat in de "random" berekening wordt meegenomen waardoor de kans groter is dat je uitkomst uniek is (als je de seed steeds veranderd).

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Verwijderd

Random getallen zijn eigenlijk pseudo random getallen.

Ik denk dat er op HowStuffWorks wel iets over te lezen is, ben niet zeker. De basis is alleszins gebaseerd op modulo-rekening. De computer start met een vast getal en voert daar modulo-rekening op uit met een hele grote modulus. Dat bekomen getal vormt dan de basis voor het volgende random getal. Zo komt er soort random getal tot stand. Verder kan er ook nog gebruik gemaakt worden van het uur of datum etc om iets willekeuriger te werken.

  • Koeniepoenie
  • Registratie: Oktober 2003
  • Laatst online: 14-11 13:12
NMe84 schreef op 16 augustus 2004 @ 21:36:
Willekeurigheid bestaat niet voor computers. Als je in Pascal of C bijvoorbeeld een random getal laat maken zonder eerst te randomizen, dan krijg je steeds als je het programma opnieuw opstart dezelfde waarden.
Neej ok, daar was ik achter, maar hoe 'doen ze alsof' ze een willekeurig getal maken dan?
Willekeurigheid bestaat dus wel, alleen snapt een computer dat niet. ;)
Waar vind jij willekeurigheid dan?
Maar goed, dat wijkt af van 't topic ;)

Parse error: syntax error, unexpected GOT_USER in https://gathering.tweakers.net on line 1337


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Meestal begin je idd met een vast getal, een 'seed', en daarmee gebruik je een chaotische functie. Computer random wordt dan ook wel semi-random (of pseudo) genoemd, omdat er vaak een lichte mate van voorspelbaarheid in zit.

Echt random wordt volgens mij op het moment vooral gedaan dmv het meten van atmosferische ruis. (er staat me ook iets bij over het meten van het verval van onstabiele isotopen.)

[ Voor 15% gewijzigd door Zoijar op 16-08-2004 21:41 ]


  • Microkid
  • Registratie: Augustus 2000
  • Laatst online: 11:45

Microkid

Frontpage Admin / Moderator PW/VA

Smile

Ik dacht dat er iig gerekend werd met de kloktijd (miliseconden) en een formule waardoor er steeds andere waarden uitrollen.

4800Wp zonnestroom met Enphase
Life's a waste of time. Time's a waste of life. Get wasted all the time and you'll have the time of your life.


  • Henk007
  • Registratie: December 2003
  • Laatst online: 06-04 00:29
Echte random getallen zijn het niet, meestal wordt dat pseudo-random genoemd.
Daarbij wordt gebruik gemaakt van funkties die een zo grillig verloop hebben dat het lijkt alsof de uitkomst willekeurig is.
Verder heeft iedere randomgenerator een 'seed' nodig. Anders zou het eerste willekeurige getal na het opstarten steeds hetzelfde zijn, want als f(x)=a blijft dat zo voor dezelfde x, hoe grillig verloop f(x) ook heeft.
Voor deze seed maakt men gebruik van timers eventueel in combinatie met user input (aantal millisec tussen 2 toetsaanslagen of zo).
Het wiskundig analyseren van de kwaliteit van een random generator is nog een vak apart trouwens.

Edit:
Woei, de search werkt weer:
Computers en random getallen?
Hoe kiest de computer een random nummer?
Random getallen

[ Voor 17% gewijzigd door Henk007 op 16-08-2004 21:53 ]


  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 23-12 11:32

glashio

C64 > AMIGA > PC

NMe84 schreef op 16 augustus 2004 @ 21:36:
Als je in Pascal of C bijvoorbeeld een random getal laat maken zonder eerst te randomizen, dan krijg je steeds als je het programma opnieuw opstart dezelfde waarden.

Hoe je een goed semi-random getal maakt heb ik ooit geweten, maar nu niet meer.
code:
1
seed(unix timestamp)
C of Pascal syntax is mij niet bekend

Het ligt eraan hoe diep in gradatie de random moet zijn (ivm floatingpoint berekeningen).
Dit is de ultieme "Random Seeder" :9 ( maar gebruikerhandeling afhankelijk O-) )

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


  • SysRq
  • Registratie: December 2001
  • Laatst online: 28-12 23:33
Microkid schreef op 16 augustus 2004 @ 21:40:
Ik dacht dat er iig gerekend werd met de kloktijd (miliseconden) en een formule waardoor er steeds andere waarden uitrollen.
Als je het zo stelt is het dus totaal niet random: de dezelfde kloktijd en de formule geven dus iedere keer dezelfde waarde terug.
Zoijar schreef op 16 augustus 2004 @ 21:39:
Echt random wordt volgens mij op het moment vooral gedaan dmv het meten van atmosferische ruis. (er staat me ook iets bij over het meten van het verval van onstabiele isotopen.)
Kun je aantonen dat atmosferische ruis 'echt' random is? Dat _wij_ er geen partoon in kunnen zien wil natuurlijk nog niet zeggen dat het volledig random is.

-


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

SysRq schreef op 16 augustus 2004 @ 21:45:
Kun je aantonen dat atmosferische ruis 'echt' random is? Dat _wij_ er geen partoon in kunnen zien wil natuurlijk nog niet zeggen dat het volledig random is.
Nou...ja en nee. Statistisch is het random. Er zit natuurlijk een patroon achter, maar dat is zo complex dat het niet te beschrijven is, en waarschijnlijk ook niet turing computable is.

Heb het even nagezocht en idd de drie waar ik al aan dacht (radioactiviteit, ruis, lavalamps)
A really good source of entropy is a radioactive source. The points in time at which a radioactive source decays are completely unpredictable, and can be sampled and fed into a computer, avoiding any buffering mechanisms in the operating system. In fact, this is what the HotBits people at Fourmilab in Switzerland are doing. Another source of entropy could be atmospheric noise from a radio, like that used here at random.org, or even just background noise from an office or laboratory. The lavarand people at Silicon Graphics have been clever enough to use lava lamps to generate random numbers, so their entropy source not only gives them entropy, it also looks good! The latest random number generator to come online (both lavarand and HotBits precede random.org) is Damon Hart-Davis' Java EntropyPool which gathers random bits from a variety of sources including HotBits and random.org, but also from web page hits received by the EntropyPool's web server.
-- random.org

Verwijderd

Zoijar schreef op 16 augustus 2004 @ 21:47:
[...]
niet turing computable is.
En waarom is dat?

/me is heel benieuwd hoe Zoijar zich hier uit redt. >:)

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 10-12 14:13
Quantum mechanica en chaos effect. Niet alleen de spreekwoordelijke vlinder kan een storm tot gevolg hebben, maar ook een spontaan deeltjespaar.

Overigens werk ik in dit soort zaken bij voorkeur niet met wiskundige, maar fysische modellen van de grenzen. Een probleem is dan niet Turing-computable als 1080 gates in 1042 klokcycli het niet kunnen uitrekenen. Dat is veel minder dan oneindig ;)

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Ja, MSalters legt het eigenlijk al uit. Bovendien type ik voor dat soort uitspraken (op gevoel) altijd iets als 'waarschijnlijk' om mezelf in te dekken; dan zit je meestal wel goed ;)

Verder denk ik dat je om alle atmosferische ruis op aarde exact uit te rekenen, zo goed als een simulatie van het universum moet hebben. Het moge duidelijk zijn dat als bepaalde (simpele) problemen al niet turing compatible zijn, dat een simulatie van het universum dat zeker niet is. Bovendien zou je hier een simulatie zo groot als het universum zelf voor nodig hebben, ofwel het universum zelf. En dan nog het 'god plays dice' probleem... Hoe ga je berekenen op een turing machine wanneer een radioactief deeltje vervalt? Hoewel je wel kan optimaliseren etc. en zo misschien al mijn argumenten van tafel kan vegen, heb ik intuitief het gevoel dat het een onmogelijke opgave zal zijn.

Wat wel eventueel zou kunnen is een statistisch model opstellen van ruis op aarde, en daar met behulp van gegeven voorwaarden (datum van meting, positie aarde, etc) genoeg voorspellingen over kunnen doen om het pseudo random te maken.

  • Mx. Alba
  • Registratie: Augustus 2001
  • Laatst online: 09:37

Mx. Alba

hen/hun/die/diens

MSalters schreef op 16 augustus 2004 @ 23:47:
Quantum mechanica en chaos effect. Niet alleen de spreekwoordelijke vlinder kan een storm tot gevolg hebben, maar ook een spontaan deeltjespaar.
Fout.

Een anti-deeltje is eigenlijk een heel gewoon deeltje, maar het gaat terug in de tijd. Er ontstaan dus niet zomaar uit het niets een deeltje en een anti-deeltje! Het anti-deeltje komt "tegen de tijd in" aan, en wordt omgezet in een gewoon deeltje, dat weer met de tijd mee weg gaat. Vanuit ons tijdgebonden oogpunt lijkt het dus alsof uit het niets een deeltje en een anti-deeltje ontstaan, maar dat is dus niet zo.

Een deeltje en een anti-deeltje dat elkaar opheffen werkt het zelfde. Er komt een deeltje aangewandeld, met de tijd mee, die dan zijn tijdcomponent omkeert en dus een anti-deeltje wordt, dat terug in de tijd gaat. Voor ons lijkt het alsof een deeltje en een anti-deeltje opelkaar botsen en compleet verdwijnen, maar de werkelijkheid is dus anders.

[/offtopic]

Voor zover ik weet is de beste bron voor willekeurigheid het verval van radio-actieve kernen, zoals al eerder gezegd trouwens. (Spuit 13?)

Het is alleen een echte hetze als het uit Hetzerath komt, anders is het gewoon sprankelende ophef.


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 28-12 18:57

Dido

heforshe

Een simpel algoritme dat ik ooit eens ergens heb gezien ging simpelweg uit van het kwadrateren en vervolgens links en rechts trimmen van een viercijferig getal.
Uiteraard ben je ook hier afhankelijk van je seed, en hoe goed de gegenereerde getallen de statistische criteria voor willekeurigheid doorstaan weet ik niet :)

Onvoorspelbare functies zijn er genoeg, het lijkt me bijvoorbeeld niet al te moeilijk om punten uit bijvoorbeeld de Lorentz-attractor te gebruiken. Je bent nog steeds afhankelijk van je seed, maar aangezien een miniscuul kleine afwijking van je beginwaarde al onvoorspelbare gevolgen heeft zou je bij het bepalen van je seed (of in het geval van een Lorentz-attractor drie seeds) gebruik kunnen maken van de onnauwkeurigheid van je hardware.

Wat betekent mijn avatar?


Verwijderd

Onvoorspelbare functies zijn er genoeg, het lijkt me bijvoorbeeld niet al te moeilijk om punten uit bijvoorbeeld de Lorentz-attractor te gebruiken.
Precies. Met nonlineaire ruis, bijvoorbeeld dmv een Duffing oscillator, Chua's oscillator oid als basis kom je al een heel eind. En als je reden voor onwillekeurigheid encryptie is, daarvoor zijn zelfs gespecialiseerde componenten: http://www.anafocus.com/Folletos/AFM3103a.pdf

[ Voor 3% gewijzigd door Verwijderd op 17-08-2004 08:19 ]


  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Mx. Alba schreef op 17 augustus 2004 @ 07:10:
Een anti-deeltje is eigenlijk een heel gewoon deeltje, maar het gaat terug in de tijd.
Waar komt deze informatie vandaan en hoe moet ik dat interpreteren?
Er ontstaan dus niet zomaar uit het niets een deeltje en een anti-deeltje!
Virtuele deeltjesparen die uit het niets ontstaan zijn, zoals de naam al zegt, virtueel, en zijn op geen enkel moment echte deeltjes: ex nihilo nihil fit. Bij deeltjesbotsingen in deeltjesversnellers, zoals CERN, komen echter wel degelijk antideeltjes vrij, die je vervolgens ook rustig een tijdje in een magnetisch val op kunt sluiten. Die reizen niet terug in de tijd en vervallen zeker niet in 'gewone' deeltjes. Een electron en een positron (anti-electron) kunnen zelf voor korte tijd het zogenaamde positronium vormen: een gebonden toestand van de twee, dat lijkt op waterstof, met het verschil dat het instabiel is. De twee zullen elkaar annihileren, waarbij energie vrijkomt.
Een deeltje en een anti-deeltje dat elkaar opheffen werkt het zelfde. Er komt een deeltje aangewandeld, met de tijd mee, die dan zijn tijdcomponent omkeert en dus een anti-deeltje wordt, dat terug in de tijd gaat. Voor ons lijkt het alsof een deeltje en een anti-deeltje opelkaar botsen en compleet verdwijnen, maar de werkelijkheid is dus anders.
Nou, volgens mij is de werkelijkheid helemaal niet anders, maar is jouw versie een andere interpretatie van dezelfde wiskunde. Maar hoe de wiskunde fysische geinterpreteerd dient te worden is niet duidelijk en het is zeker niet gangbaar om te accepteren dat 'de tijdscomponent van het deeltje' 'omgedraaid' wordt. Het is niet eens duidelijk wat dat precies zou moeten betekenen in 'de werkelijkheid'.

Edit: Tenzij je het in termen van Feynman diagrammen bedoeld, maar dan nog...

[ Voor 5% gewijzigd door Confusion op 17-08-2004 17:39 ]

Wie trösten wir uns, die Mörder aller Mörder?


  • Karel V
  • Registratie: November 2003
  • Laatst online: 18-12 22:25

Karel V

Een simpele ziel

Zoijar schreef op 16 augustus 2004 @ 21:39:
[...]
Echt random wordt volgens mij op het moment vooral gedaan dmv het meten van atmosferische ruis. (er staat me ook iets bij over het meten van het verval van onstabiele isotopen.)
Mij staat ook iets bij van ruis.
Zou dat ook niet bij je poorten gemeten kunnen worden. Ik herinner me dat er daar altijd wel hele kleine ruisspanningen heersen, die zo goed als random heen en weer flippen (in storende omgevingen).

The old Lie: Dulce et Decorum est Pro patria mori


Verwijderd

Een voorbeeld van een random number generator die was ooit nog een oefening was. Ik kan geen exacte verklaring geven voor de beginwaardes, al lijkt het mij logisch dat grotere waardes een grilliger verloop opleveren en dat de waardes onderling best relatief priem zijn.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
;;;initialisatie
modulogetal= - 2^32
vermeningvuldiggetal= 7^5
seed= 97

;;eigenlijke code

function random:
            ;;;seed krijgt een nieuwe random waarde
           seed = modulus(seed*vermenigvuldiggetal),modulogetal)

            ;;;zorgen dat het getal teruggeven tussen 0 en 1 ligt
           return  seed/modulogetal

  • caipirinha
  • Registratie: Mei 2004
  • Niet online

caipirinha

The boy from brazil

Voor een goede uitleg over pseudorandomgetallen kun je "The art of computer programming" deel 2 van Donald E Knuth lezen. Heb ik zelf veel van geleerd. ISBN 0-201-89684-2. Is redelijk taai.
Echte randomgetallen kun je genereren met een ruisende diode en een a/d converter.
De nieuwe VIA mini ITX bordjes hebben zo´n generator in de processor ingebouwd, Heb geen flauw idee hoe goed deze is.

No self-respecting engineer should have to close a game to run a circuit simulation.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 10-12 14:13
Confusion schreef op 17 augustus 2004 @ 10:03:
[...]
Virtuele deeltjesparen die uit het niets ontstaan zijn, zoals de naam al zegt, virtueel, en zijn op geen enkel moment echte deeltjes: ex nihilo nihil fit
Als je Wikipedia quote, quote dan op z'n minst het relevante artikel:
virtual particles
Daar staat inderdaad dat externe energie het deeltjespaar uit elkaar kan drijven. Nou, de atmosfeer mag dan een gas zijn, maar er zijn nog genoeg deeltjes en dus genoeg energie om een enkel deeltjespaar uit elkaar te drijven, dus dat draagt zeker bij aan de onvoorspelbaarheid van de atmosfeer.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Vaughn
  • Registratie: Juni 1999
  • Laatst online: 06-12 10:43

Vaughn

Powered by Jomanda

Johnny schreef op 16 augustus 2004 @ 21:37:

Het maken van random getallen is inderdaad een van de moeilijkste dingen die er is.

Als je programmeert zal de computer vaak het random getal op de huidige datum en tijd baseren, en daar nog wat andere omgevingsvariablen en daar berekeningen op los laten.

Vaak is het ook mogelijk om een zogenaamde "seed" op te geven, een extra getal dat in de "random" berekening wordt meegenomen waardoor de kans groter is dat je uitkomst uniek is (als je de seed steeds veranderd).
Maken van random getallen is zo moeilijk niet... Je zou met radio activiteit iets kunnen doen i.c.m. geigerteller op de computer. Radio actief verval is namelijk geheel willekeurig.

There are 10 kinds of people: Those who understand binary and those who don't.


  • Witte
  • Registratie: Februari 2000
  • Laatst online: 10-12 09:15
Is wel heel moeilijk. Bij Random getallen moet namelijk elk getal een even grote kans hebben om voor te komen. Verder moet elke combinatie van 2 getallen ook een even grote kans hebben, en zo kan je door gaan.

Houdoe


  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

MSalters schreef op 17 augustus 2004 @ 22:34:
Daar staat inderdaad dat externe energie het deeltjespaar uit elkaar kan drijven. Nou, de atmosfeer mag dan een gas zijn, maar er zijn nog genoeg deeltjes en dus genoeg energie om een enkel deeltjespaar uit elkaar te drijven,
Zoals op die wikipedia pagina te lezen valt, gebeurt dat alleen bij bijvoorbeeld zwarte gaten, waarbij het deeltje netto uit het zwarte gat verdwijnt. In de atmosfeer is geen bron voor massa of energie en zal geen enkel virtueel deelje reeel worden. De virtuele deeltjesparen die zich om ons heen vormen annihileren elkaar met een netto effect van 0 op de omgeving (zelfs als 1 paar een effect zou kunnen hebben, zijn het er zo ontzettend veel dat het statistisch voor alle praktische overwegingen 0 oplevert).

Wie trösten wir uns, die Mörder aller Mörder?

Pagina: 1