You are not logged in.

  • Login

1

Tuesday, February 10th 2009, 7:20pm

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?

SenF_tari

Professional

Posts: 1,115

Occupation: GER

  • Send private message

2

Tuesday, February 10th 2009, 7:23pm

hab ich mich auch schon gefragt.

artikel in der welt

3

Tuesday, February 10th 2009, 7:27pm

Danke für die schnelle Antwort!!

-=)GWC(RaMsEs

Unregistered

4

Tuesday, February 10th 2009, 7:37pm

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

Tuesday, February 10th 2009, 7:38pm

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".

Posts: 11,465

Location: Hamburg

Occupation: GER

  • Send private message

6

Tuesday, February 10th 2009, 7:43pm

Quoted

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.

This post has been edited 5 times, last edit by "AtroX_Worf" (Feb 10th 2009, 8:00pm)


Posts: 7,575

Location: Hamburg

Occupation: GER

  • Send private message

7

Tuesday, February 10th 2009, 7:59pm

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.

Posts: 4,115

Location: Hildesheim

Occupation: GER

  • Send private message

8

Tuesday, February 10th 2009, 8:02pm

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

Tuesday, February 10th 2009, 9:41pm

Quoted

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

Tuesday, February 10th 2009, 9:58pm

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

Posts: 11,465

Location: Hamburg

Occupation: GER

  • Send private message

11

Tuesday, February 10th 2009, 10:05pm

Quoted

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.

Quoted

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.

This post has been edited 1 times, last edit by "AtroX_Worf" (Feb 10th 2009, 10:07pm)


12

Tuesday, February 10th 2009, 11:07pm

Quoted

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

Tuesday, February 10th 2009, 11:10pm

Quoted

Original von AtroX_Worf

Quoted

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.

Quoted

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.

Posts: 2,748

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

Occupation: GER

  • Send private message

14

Tuesday, February 10th 2009, 11:24pm

Quoted

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

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

Posts: 11,465

Location: Hamburg

Occupation: GER

  • Send private message

15

Tuesday, February 10th 2009, 11:43pm

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

Tuesday, February 10th 2009, 11:46pm

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

Unregistered

17

Wednesday, February 11th 2009, 12:00am

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!

This post has been edited 1 times, last edit by "-=)GWC(RaMsEs" (Feb 11th 2009, 12:02am)


Posts: 2,748

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

Occupation: GER

  • Send private message

18

Wednesday, February 11th 2009, 12:09am

Quoted

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. ;)

Posts: 11,465

Location: Hamburg

Occupation: GER

  • Send private message

19

Wednesday, February 11th 2009, 12:24am

Jetzt muss ich doch nochmal was schreiben.

Quoted

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.

Quoted

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:

Quoted

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

Wednesday, February 11th 2009, 12:47am

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

21

Wednesday, February 11th 2009, 12:51am

mit einem restaurant-o-mat

22

Wednesday, February 11th 2009, 12:55am

Quoted

Original von AtroX_Worf

Quoted

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.

This post has been edited 1 times, last edit by "[pG]fire_de" (Feb 11th 2009, 1:00am)


plexiq

Professional

Posts: 1,512

Location: Wien

  • Send private message

23

Wednesday, February 11th 2009, 12:58am

Quoted

Original von AtroX_Worf

Quoted

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".

Posts: 11,465

Location: Hamburg

Occupation: GER

  • Send private message

24

Wednesday, February 11th 2009, 1:27am

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.

Quoted

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:

Quoted

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.

This post has been edited 1 times, last edit by "AtroX_Worf" (Feb 11th 2009, 1:36am)


25

Wednesday, February 11th 2009, 4:52am

Quoted

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.

DitschiGP

Professional

Posts: 641

Location: Brunsbüttel

Occupation: Ger

  • Send private message

26

Wednesday, February 11th 2009, 8:08am

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

27

Wednesday, February 11th 2009, 9:14am

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...

Posts: 8,654

Location: Köln

Occupation: GER

  • Send private message

28

Wednesday, February 11th 2009, 10:07am

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

Wednesday, February 11th 2009, 10:30am

ich fand taris post am besten :)

30

Wednesday, February 11th 2009, 11:24am

Ich eigentlich auch. :D