Sie sind nicht angemeldet.

  • Anmelden

1

10.02.2009, 19:20

Wie berechnet ein Computer Zufall?

Wie kriegt es ein Computer (also im Prinzip eine Rechenmaschine) hin, so etwas wie Zufall zu erschaffen. Sei es Shuffle beim MP3-Player, leicht unterschiedliche Schadenswerte bei WC3, die random-Funktion beim Taschenrechner usw. Ein Rechner kann doch nur exakt sein und nicht "aus dem Bauch heraus" entscheiden. Wenn ich ihm z.B. den Befehl gebe, eine zufällige Zahl zwischen 1 und 5 auszuspucken, wie macht er das?

2

10.02.2009, 19:23

hab ich mich auch schon gefragt.

artikel in der welt

3

10.02.2009, 19:27

Danke für die schnelle Antwort!!

-=)GWC(RaMsEs

unregistriert

4

10.02.2009, 19:37

Bei Java läuft es ein bisschen anders, da basiert der Startwert auf der akuellen Zeit

http://java.sun.com/j2se/1.4.2/docs/api/…til/Random.html

public Random()

Creates a new random number generator. Its seed is initialized to a value based on the current time:

public Random() { this(System.currentTimeMillis());

5

10.02.2009, 19:38

Hmm, ohne den Artikel in der Welt zu lesen, könnte ich mir vorstellen, dass einfach eine möglichst große Anzahl an Parametern eingeführt wird, wodurch sozusagen eine "Scheine-Zufälligkeit" entsteht. Zufall gibt es ja im Grunde nicht, weil dann keine Kausalität mehr gegeben wäre. Es muss immer einen Grund geben und dann geschieht doch im Grunde nichts an sich "zufällig".

6

10.02.2009, 19:43

Zitat

Original von -=)GWC(RaMsEs
Bei Java läuft es ein bisschen anders, da basiert der Startwert auf der akuellen Zeit

http://java.sun.com/j2se/1.4.2/docs/api/…til/Random.html

public Random()

Creates a new random number generator. Its seed is initialized to a value based on the current time:

public Random() { this(System.currentTimeMillis());

:D ich glaube du hast die Frage nicht verstanden. Ihm geht es weniger um die Funktion, sondern wie ein deterministisches Gerät wie ein Computer auf etwas zufälliges kommt, wenn der Input nicht schon zufällig war.

wikipedia als erste Anlaufstelle. Wenn du mehr Wissen möchtest, frag einfach. :)

€dit: @herby: nein, es reicht normal ein Inputparameter (Uhrzeit oder seed (Startwert), etc), dann werden Quasi-Zufallszahle erzeugt. Dies ist in der Tat eine deterministische Folge von Zahlen, allerdings bestehen sie die statistischen Tests, mit denen man auf Zufälligkeit überprüft.

Grundsätzlich kannst du es dir als eine Projektion von einem sehr hochdimensionalen Raum auf die eindimenionale Zahlengerade vorstellen. Durch diese Projektion sieht das Bild auf IR zufällig aus.

€dit #2: Artikel durchgelesen, der beschreibt es eigentlich ganz gut. Die zweite Methode wird, natürlich verbessert, heute benutzt.
Standardmäßig benutzt man wohl Mersenne-Twister (ich zumindest :P), der aber etwas modfiziert arbeitet.

Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »AtroX_Worf« (10.02.2009, 20:00)


Attila

Erleuchteter

Beiträge: 7 575

Wohnort: Hamburg

Beruf: GER

  • Nachricht senden

7

10.02.2009, 19:59

in der ct war neulich ein artikel wo eine methode beschrieben wurde mit der man möglichst schnell an möglichst gute zufallszahlen kommt, da war auch ne test suite dabei wo man testen konnte "wie gut" die zufallszahlen sind.



In der ct haben die mit webcams durch bildrauschen zufallswerte produziert, das bildrauschen wurde künstlich verstärkt (durch bestimmte einstellungen und dunkelheit) wodurch man wohl sehr gute randomwerte bekommt (da das rauschen zufällig auftritt und kein zusammenhang besteht)


Dabei gings jetzt aber um wirkliche zufallswerte, wo es auch wichtig war (für verschlüsselungen usw.) wie die das bei wc3 etc machen weiß ich nicht.

OoK_Isch

Erleuchteter

Beiträge: 4 115

Wohnort: Hildesheim

Beruf: GER

  • Nachricht senden

8

10.02.2009, 20:02

Naja, bei so Dingen wie Wc3 sind es sicher nur ganz simple Pseudozufallszahlen. Da geht es ja eher darum, dass sie schnell produziert werden können, als darum dass sie nicht vorhersagbar sind. Ist ja wurscht ob alle 1000 Iterationen die gleiche Zufallszahl kommt, soviele unterschiedliche Schadenswerte gibts wahrscheinlich eh nicht *g*

9

10.02.2009, 21:41

Zitat

Original von AtroX_Worf
:D ich glaube du hast die Frage nicht verstanden. Ihm geht es weniger um die Funktion, sondern wie ein deterministisches Gerät wie ein Computer auf etwas zufälliges kommt, wenn der Input nicht schon zufällig war.


ich finde, ramses antwortet recht gut auf die frage, indem er ein geläufiges beispiel nennt, die den sachverhalt erklären, nämlich dass es keine zufallszahlen sind, sondern rein deterministische (hier z.b. vereinfacht gesagt die aktuelle zeit in ms), die nur so aussehen, als wenn es zufallszahlen wären.

wo ist die frage da nicht verstanden?

10

10.02.2009, 21:58

Ramses hat es kurz, präzise und hilfreich erklärt. Worf muss natürlich direkt mit seinem umfangreichen Theoriewissen prahlen. Irgendwie muss sich ja das Studium lohnen, und wenn es nur ein Post in einem Forum ist. Herrlich :D

11

10.02.2009, 22:05

Zitat

Original von jens
ich finde, ramses antwortet recht gut auf die frage, indem er ein geläufiges beispiel nennt, die den sachverhalt erklären, nämlich dass es keine zufallszahlen sind, sondern rein deterministische (hier z.b. vereinfacht gesagt die aktuelle zeit in ms), die nur so aussehen, als wenn es zufallszahlen wären.
wo ist die frage da nicht verstanden?

Ramses sagt mit keinem Wort, wie ein deterministisches System wie ein Computer eine zufällige Sequenz erzeugt. Wieso erhalte ich denn eine zufällige Folge von Zahlen, wenn ich einer Funktion die aktuelle Zeit in Millisekunden übergebe? Weil die Funktion "Random" heißt? :D Er hat leider überhaupt nichts erklärt.

Zitat

Original von MaxPower
Ramses hat es kurz, präzise und hilfreich erklärt. Worf muss natürlich direkt mit seinem umfangreichen Theoriewissen prahlen. Irgendwie muss sich ja das Studium lohnen, und wenn es nur ein Post in einem Forum ist. Herrlich :D

Ramses hat überhaupt nichts erklärt, einfach "public Random()" posten ist ja wohl recht sinnlos. Von allen Postings mit Erklärungsversuchen war es das einzige, was überhaupt nichts zum Thema beigetragen hatte.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »AtroX_Worf« (10.02.2009, 22:07)


12

10.02.2009, 23:07

Zitat

Original von AtroX_Worf
Ramses hat überhaupt nichts erklärt


Er ist nicht verpflichtet, das ganze hier bis ins Detail zu erläutern. Die Erklärung, dass es auf der Systemzeit basiert, kam, und dazu ein Link um sich weiter zu informieren. Von "überhaupt nichts erklärt" kann also nicht die Rede sein.

Wenn L3mOr3L sich also damit beschäftigen will und sich da durchbeisst, bringt ihn das weiter. Mehr als diese Diskussion hier übrigens...

13

10.02.2009, 23:10

Zitat

Original von AtroX_Worf

Zitat

Original von jens
ich finde, ramses antwortet recht gut auf die frage, indem er ein geläufiges beispiel nennt, die den sachverhalt erklären, nämlich dass es keine zufallszahlen sind, sondern rein deterministische (hier z.b. vereinfacht gesagt die aktuelle zeit in ms), die nur so aussehen, als wenn es zufallszahlen wären.
wo ist die frage da nicht verstanden?

Ramses sagt mit keinem Wort, wie ein deterministisches System wie ein Computer eine zufällige Sequenz erzeugt. Wieso erhalte ich denn eine zufällige Folge von Zahlen, wenn ich einer Funktion die aktuelle Zeit in Millisekunden übergebe? Weil die Funktion "Random" heißt? :D Er hat leider überhaupt nichts erklärt.

Zitat

Original von MaxPower
Ramses hat es kurz, präzise und hilfreich erklärt. Worf muss natürlich direkt mit seinem umfangreichen Theoriewissen prahlen. Irgendwie muss sich ja das Studium lohnen, und wenn es nur ein Post in einem Forum ist. Herrlich :D

Ramses hat überhaupt nichts erklärt, einfach "public Random()" posten ist ja wohl recht sinnlos. Von allen Postings mit Erklärungsversuchen war es das einzige, was überhaupt nichts zum Thema beigetragen hatte.


Nett, dass du darauf angesprungen bist. Ich weiss nicht, was Freud dazu sagen würde, aber ich würde auf ein erhöhtes Geltungsbedürfnis schliessen. Möglicherweise verursacht durch übermässigen Stress beim Lernen.

Beiträge: 2 748

Wohnort: 51° 7'52.79"N 6°27'3.13"E

Beruf: GER

  • Nachricht senden

14

10.02.2009, 23:24

Zitat

Original von Sheep
Mehr als diese Diskussion hier übrigens...

Latürnich, aber amüsant sind Worfs Beiträge schon....diese unfreiwillige Komik.

15

10.02.2009, 23:43

Ja und? Wenn er nichts erklärt, dann hilft auch FH'ler Solidarität nichts.

@Sheep: Auf der Systemzeit basiert ja eigentlich nichts. Ob du der Funktion jetzt einen seed übergibst oder ob dieser funktionsintern aus der CPU-Temperatur geholt wird ist doch egal.

Das entscheidende ist doch die Aussage, dass der Computer normalerweise keine echten Zufallszahlen erzeugt, sondern eine deterministische Folge von Pseudo-Zufallszahlen, welche aber die statistischen Tests bestehen.
Wenn ich Wissen wöllte, wie ein Fernseher wirklich funktioniert (:D), dann bringt es mir schließlich auch wenig, wenn man mit einen schwarzen Plastikkasten zeigt und sagt, dies ist ein Fernseher, wenn du auf den Anschalter drückst, dann kommt Bild und Ton. Das so etwas geht habe ich normal schon vorher gewußt, die Frage zielte ja auf die funktionsweise ab.

16

10.02.2009, 23:46

Die Funktionsweise wird in dem Zeit Artikel erklärt und Ramses gibt halt noch nen Beispiel wie der Startwert in JAVA ermittelt wird.

-=)GWC(RaMsEs

unregistriert

17

11.02.2009, 00:00

he worfi, Füsse still halten, warum ich das geschrieben habe liegt in einem kleinen detail:

Die beispiele in diesem Artikel nennen eine feste Zahl als ausgangslage und berechnen die restlichen zahlen auf basis dieser iterativ.

java hingegen nimmt die aktuelle Uhrzeit ( bzw die millisekunden die seit der Java Zeirechnung genommen werden) als basis, also eine millisekündlich sich ändernden zahlenwert.

Und da es um Computer geht und er auch ein Computerspiel angeführt wird habe ich dreisterweise gedacht das ein Beispiel aus einer gängigen Programmiersprache helfen könnte um die bandbreite der antwort zu erweitern.

thx an alle die diesen einfachen beitrag meinerseits so verstanden haben wie er geschrieben wurde!

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »-=)GWC(RaMsEs« (11.02.2009, 00:02)


Beiträge: 2 748

Wohnort: 51° 7'52.79"N 6°27'3.13"E

Beruf: GER

  • Nachricht senden

18

11.02.2009, 00:09

Zitat

Original von -=)GWC(RaMsEs
thx an alle die diesen einfachen beitrag meinerseits so verstanden haben wie er geschrieben wurde!

Tja manchmal sollte man bei Antworten schon selbst (weiter)denken und nicht alles bis in kleinste Detail vorgekaut kriegen. ;)

19

11.02.2009, 00:24

Jetzt muss ich doch nochmal was schreiben.

Zitat

Original von jens
...nämlich dass es keine zufallszahlen sind, sondern rein deterministische (hier z.b. vereinfacht gesagt die aktuelle zeit in ms), die nur so aussehen, als wenn es zufallszahlen wären.

Genau so ist es eben nicht!
Nochmal grundsätzlich: Bei modernen Zufallszahlengeneratoren wird nach einer festen mathematischen Vorschrift, eventuell abhängig von einem Startwert, eine Folge von Zahlen erzeugt. Diese Sequenz ist mit dem gleichen Startwert immer reproduzierbar, erfüllt aber die statistischen Kriterien für Zufälligkeit.
Die Java-Funktion Random verlang als Argument nur eine Zahl vom Typ long. Man kann also einen beliebigen Wert übergeben. Da es einem meist egal ist welchen Startwert man nimmt, so hat es sich eingebügert die Systemzeit in Millisekunden zu nehmen. Diese Entscheidung hat aber nichts mit der Zufälligkeit der Sequenz zu tun, welche die Funktion Random zurück gibt. Von der Arbeitsweise hat Ramses nichts gesagt, und auch unter dem Link steht erst einmal nur, dass eine Modifikation der linearen Kongruenzmethode benutzt wird - was einem als Begriff nichts sagen dürfte, kennt man sich nicht schon mit dem Thema aus.

Zitat

Original von -=)GWC(RaMsEs
Die beispiele in diesem Artikel nennen eine feste Zahl als ausgangslage und berechnen die restlichen zahlen auf basis dieser iterativ.

java hingegen nimmt die aktuelle Uhrzeit ( bzw die millisekunden die seit der Java Zeirechnung genommen werden) als basis, also eine millisekündlich sich ändernden zahlenwert.

hmhm, ich bin mir zwar nicht 100%ig sicher, aber ich glaube wenn man beide Aussagen von dir so zusammen liest, dann ergeben sie eine falsche Tendenz. Auch zu:

Zitat

Original von [pG]fire_de
Die Funktionsweise wird in dem Zeit Artikel erklärt und Ramses gibt halt noch nen Beispiel wie der Startwert in JAVA ermittelt wird.

Der Startwert wird nicht ermittelt sondern einfach gesetzt und das ganze hat auch nichts mit Java zu tun. Die Funktion Random braucht einfach einen Startwert vom Typ long als Funktionsargument, die Systemeit in Millisekunden ist ein solcher Startwert.
Java nimmt überhaupt nichts als Basis, es ist einfach common practice beim programmieren als seed die Systemuhrzeit zu verwenden, wenn es nicht auf Reproduzierbarkeit ankommt sondern auf irgend einen Startwert. Genauso könnte man die CPU-Temperatur von vor 42 Sekunden und die Farbe von 5 Pixeln von vor 2 Sekunden nehmen... ist halt umständlicher und vielleicht fehleranfälliger.

Der Einwand, dass man als common practice die Systemzeit benutzt ist ok, aber Pseudo-Zufallszahlen kann man nicht mit der Angabe eines Funktionsnamens erklären, praktisch einer black-box.

20

11.02.2009, 00:47

Was ist der Unterschied zwischen Ermitteln und setzen? Muss man eine Uhrzeit nicht ermitteln um mit ihr arbeiten zu können?

21

11.02.2009, 00:51

mit einem restaurant-o-mat

22

11.02.2009, 00:55

Zitat

Original von AtroX_Worf

Zitat

Original von [pG]fire_de
Die Funktionsweise wird in dem Zeit Artikel erklärt und Ramses gibt halt noch nen Beispiel wie der Startwert in JAVA ermittelt wird.

Der Startwert wird nicht ermittelt sondern einfach gesetzt und das ganze hat auch nichts mit Java zu tun. Die Funktion Random braucht einfach einen Startwert vom Typ long als Funktionsargument, die Systemeit in Millisekunden ist ein solcher Startwert.
Java nimmt überhaupt nichts als Basis, es ist einfach common practice beim programmieren als seed die Systemuhrzeit zu verwenden, wenn es nicht auf Reproduzierbarkeit ankommt sondern auf irgend einen Startwert. Genauso könnte man die CPU-Temperatur von vor 42 Sekunden und die Farbe von 5 Pixeln von vor 2 Sekunden nehmen... ist halt umständlicher und vielleicht fehleranfälliger.


Die Funktionsweise wird in dem Zeit Artikel erklärt und Ramses gibt halt noch nen Beispiel wie der Startwert in JAVA ermittelt werden kann.

hmm die ausdruckweise ist auch nicht 100% korrekt, aber es ist auch scheiss egal. ramses wollte einfach nur ein beispiel zeigen und garnicht erklären wie es funtkioniert, weil es schon vorher im zeit artikel erklärt wurde und dann machst du ihn dumm an weil er es nicht erklärt.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »[pG]fire_de« (11.02.2009, 01:00)


23

11.02.2009, 00:58

Zitat

Original von AtroX_Worf

Zitat

Original von jens
...nämlich dass es keine zufallszahlen sind, sondern rein deterministische (hier z.b. vereinfacht gesagt die aktuelle zeit in ms), die nur so aussehen, als wenn es zufallszahlen wären.

Genau so ist es eben nicht!


Meh, im Prinzip stimmt doch ganz genau was er sagt - es ist eine deterministisch berechnete Zahlenfolge die "zufällig aussieht".

24

11.02.2009, 01:27

Außerhalb der Klammer ist ja alles richtig, in der Klammer das von mir kursiv hervorgehobene aber nicht. Es klingt so, als wäre die Zufallszahl einfach die aktuelle Systemzeit in Millisekunden.
Das Wort "Zahlenfolge" kommt da ja gar nicht vor.

Zitat

Original von [pG]fire_de
Die Funktionsweise wird in dem Zeit Artikel erklärt und Ramses gibt halt noch nen Beispiel wie der Startwert in JAVA ermittelt werden kann.

Ich habe Ramses aber anders verstanden, er leitet seinen Beitrag wie folgend ein:

Zitat

Original von -=)GWC(RaMsEs
Bei Java läuft es ein bisschen anders, da basiert der Startwert auf der akuellen Zeit

und bezieht sich dabei auf den geposteten Link, dazwischen war nur L3mOr3L's Dank.
Die Methode bei der von Ramses beschriebenen Funktion Random ist eine Standardmethode, wie sie grob auch im Artikel als zweites angedeutet wird. Unter Jave läuft es eben nicht anders. Die Systemzeit ist kein entscheidender Eingabefaktor, die eigentliche Arbeit wird ja in der black-box Funktion Random getan. Die Zufälligkeit, auf die die Frage abzielte, kommt eben in erster Linie nicht durch die Zeit, sondern durch die mathematische Funktion.
Nachtrag: Ich könnte auch einen Standardwert als seed für die Funktion festlegen. Zufälligkeit ist ja eine Eigenschaft, welche erst eine Folge von Zahlen haben kann. Diese wird zu einem bestimmten seed gemessen, denn wenn man immer das erste Folgenglied zu unterschiedlichen seeds wie der Uhrzeit nimmt, so passiert die dann erhaltene Folge meines Wissens nicht notwendigerweise die statistischen Tests.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »AtroX_Worf« (11.02.2009, 01:36)


25

11.02.2009, 04:52

Zitat

Genauso könnte man die CPU-Temperatur von vor 42 Sekunden und die Farbe von 5 Pixeln von vor 2 Sekunden nehmen... ist halt umständlicher und vielleicht fehleranfälliger.


Das ist nicht nur vielleicht umständlicher und fehleranfälliger .. überleg mal mit welche "Auflösung" so n Temperatursensor arbeitet und wie schnell sich da die Temperatur ändert, bzw. der überhaupt abgefragt wird. Oder anders ausgedrückt .. mach dir mal Gedanken über die Quantisierung, Abtastfrequenz und Polling. Was besseres als 'ne hochauflösende Systemzeit wirst du da in 'nem Standard-PC kaum finden (zumindest nicht wenn der noch was anderes außer Zeitmessung machen soll). Und selbst wenn du das Rauschen von einem externen Messgerät einspeisen lässt was mit 20GS arbeitet wird der PC davon nur einen Bruchteil für in Echzeit generierte Zufallszahlen verwenden können - was man sich damit aber natürlich spart ist die Zufallsfunktion.

Beiträge: 641

Wohnort: Brunsbüttel

Beruf: Ger

  • Nachricht senden

26

11.02.2009, 08:08

masters live
ausgehend von der frage im ersten post sind wir jetzt beim intellektuellen schwanzvergleich

27

11.02.2009, 09:14

Naja, Worf hat seinen Penis herausgeholt und möchte nun dass die anderen ihren auch zeigen...

Es hat sich eingebürgert, als Startwert die aktuelle Zeit in MS zu nehmen, da dies eine sich ständig ändernde Eingabevariable darstellt. Defautlmässig muss man der funktion in Java z.B. nichts übergeben.

Wenn man einen festen Wert übergibt dann ist es ja nicht mehr zufällig, da ja die funktion quasi eine Abbildung der Eingabevariable auf eine Folge von scheinbar zufälligen Ausgabevariablen ist. D.h. übergibt man immer die gleiche Zahl, so erscheinen die gleichen Ausgabezahlen, es sei denn der Algorithmus nimmt irgendwann nochmal variablen auf (z.B. nochmals die uhrzeit, durch das scheduling ist der 2. messwert dann quasi auch zufällig, da es ja nicht deterministisch ist, wenn der 2. Messpunkt ist.


Andere eingabeparameter zu bekommen wäre schwerer, langsamer und fehleranfälliger (das mit den Pixeln ist nur ne gute idee wenn man die von der mitte nimmt und die eigene GUI nicht den Bildschirm dort bedeckt, denn sonst ist der EIngabeparameter ja immer gleich ;)


ALso Worf, wenn du schon kritisierst, dass die Erklärung nicht gut genug ist, dann mach es bitte besser und laber nicht wild in der Gegen herum über Sachen die keiner gefragt hat.

Das ist typisch für leute wie dich. Man frägt was, dann bekommt man eine Antwort die zwar korrekt ist, aber einem nicht weiterhilft. In einer Firma würdest du damit nicht nur deine eigene Arbeitszeit sondern auch die der anderen verschwenden...

28

11.02.2009, 10:07

Also Worf ganz ehrlich, Ramses post war deutlich hilfreicher. Schließlich war die Frage auch wie berechnet der Computer Zufall, und nicht wie berechnet der Computer eine Folge von Zufallszahlen.

29

11.02.2009, 10:30

ich fand taris post am besten :)