• Hi, dadurch dass wir in Mathe gerade das Themengebiet (mehrstufige) Zufallsexperimente behandeln, habe ich irgendwie einen komplett neuen Blickwinkel auf die Funktion Random () bekommen.
    Was ich mich jetzt frage: Wie generiert ein Computer Zufallszahlen? Mir ist das komnplett unverständlich. Und lässt sich eine Funktion zum Generieren von Zufallszahlen in AutoIt nachbilden (also ohne irgendwelche DLLs)?

    Vielleicht kann mich ja jemand von euch aufklären :)

  • Laut Welt.de wird eine bestimmte Zahl bspw. für eine bestimmte Zeit x-Mal quadriert und ein paar Stellen des Ergebnisses entnommen. Da der PC immer (minimal) unterschiedlich lange braucht, sind die Zahlen immer anders. So verstehe ich das zumindest, auf jeden Fall muss es was mit der Auslastung des Prozessors zu tun haben. Ich kann allerdings auch falsch liegen.
    Ich finde es aber auch höchst interessant!

  • Das seltsame ist ja. Wenn du etwas generierst machst du es ja nach einen bestimmten Algorithmus. Das heißt du musst ja dann wissen, wie du sie generieren willst. Also ist es ja quasi vorhersehbar welche Zahlen kommen werden. Ich denke mal Random, wird da irgendwelche Zahlen oder das aktuelle Datum, miteinander hin und her rechnen und Quersummen bilden und so, bis dann eine Zahl am Ende rauskommt.

  • Laut Welt.de wird eine bestimmte Zahl bspw. für eine bestimmte Zeit x-Mal quadriert und ein paar Stellen des Ergebnisses entnommen. Da der PC immer (minimal) unterschiedlich lange braucht, sind die Zahlen immer anders. So verstehe ich das zumindest, auf jeden Fall muss es was mit der Auslastung des Prozessors zu tun haben. Ich kann allerdings auch falsch liegen.
    Ich finde es aber auch höchst interessant!

    Den von mir markierten Satz im Zitat verstehe ich nicht. Wenn ich die Zahl x habe und mit der immer die gleichen Berechnungen ausführe, dann kommt am Ende auch immer das gleiche raus, egal wie schnell oder langsam der PC arbeitet. Aber der Welt.de-Artikel ist ja sehr insteressant. Nur bleibt die Frage nach dem Ursprung der ersten Zahl. Das mit dem Datum ist eine gute Idee. Darauf bin ich noch nicht gekommen. Ich dachte immer an irgendwelche Zeitmessungen für irgendwelche Berechnungen (war es das, was du meintest, CyRoX?). Mit der Idee mit der aktuellen Zeit ließe sich ja eine Random Func basteln. Aber das heißt ja, dass Zufallsfunktionen nicht zufällig sind, sondern dass es durchauchs gewisse Tendenzen gibt, auch wenn man diese versucht zu minimieren. Interesannt.

  • Wenn man es genau nimmt gibt es keine Zufälle, weil alles aus einem bestimmten Grund passiert und seine Ursachen hat. Nur manchmal sind einem die Umstände nicht alle bekannt wodurch man sich nicht den Weg herleiten kann. (Besagt sowas ähnliches nicht auch die Chaostheorie? Alles besteht aus Verknüpfungen zwischen Handlungen)

    Um zu deiner Frage zurückzukommen ob es möglich ist eine Random Funktion in AutoIt zu schreiben: Ich denke mal schon. Man brauch nur Werte die man nicht unbedingt beeinflussen kann (Zeit etc), diese mehrmals miteinander irgendwie zusammenwirken lassen und dann hat man ein Ergebnis, welches man als Aussenstehender ohne die bekannten Werte und die Zusammenarbeit zwischen diesen als zufällig deutet.

    Gruß

  • Hi,
    das Problem ist nicht, EINE Zufallszahl per Funktion zu generieren, sondern sicherzustellen, dass innerhalb eines bestimmten Intervalls eine (halbwegs, wg Zufall ^^) gleichmässige Verteilung der generierten Zahlen auftritt.
    Das Thema ist so alt wie die Rechner selbst....
    Erstelle eine WieAuchImmer-Funktion, die Zufallszahlen generiert, lasse diese Funktion von anerkannten Mathematikern abnicken und lasse dir im Intervall von 1 bis 10 dann 10 Integer-Zahlen generieren.
    Heraus kommt dann die Folge 2,2,2,2,2,2,2,2,2,2....für einen Mathematiker absolut kein Problem, da diese Folge genauso zufällig ist wie jede andere auch.
    Ein Politiker, der für ein neues Sicherheitskonzept für Online-Banking stimmen soll, sieht das dann aus einem ganz anderen Blickwinkel, genau wie ein "Otto-Normalverbraucher".
    Lasse diese Funktion (wie gesagt , mathematisch korrekt) drei weitere Male Zahlen generieren, und jedes Mal wird 2,2,2,2,2,2,2,2,2,2 erstellt.
    Immer noch mathematisch korrekt, denn das ist ZUFALL!

    Die Diskussion erinnert mich immer an das Infinite-Monkey-Theorem, interessant dabei ist, dass bei einem Versuch mit einem Affen und einer Schreibmaschine kein Mensch der Welt (alle Mathematiker eingeschlossen) sich wundern würde, wenn der Affe (zufällig) eine unverständliche Buchstabenfolge tippen würde.
    Tippt der Affe aber die erste Strophe von Schillers Glocke und klatsch danach in die Hände, würden genau dieselben Menschen ( alle Mathematiker eingeschlossen) versuchen, diesen "Zufall" des Eintretens dieser unwahrscheinlichen (sic) Wahrscheinlichkeit zu analysieren.....seltsam, oder? :rolleyes:

  • Ich bin gerade echt davon fasziniert, wie kompliziert Zufall sein kann 8)

  • Eine Zufallsfunktion habe ich auch irgendwann mal geschrieben.
    Ich glaube, da gab es SRandom noch nicht, oder keiner wusste dass es das gibt.

    Geschrieben wurde sie im Zuge der Perlin Noise Generator Entwicklung für die man rekonstruierbare Zufallszahlen benötigt.

    Spoiler anzeigen
    [autoit]

    _SetRandom(10)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To 9 Step 1
    ConsoleWrite(_Random(5, 10, 2) & @CRLF)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ; $Min - Minimalwert
    ; $Max - Maximalwert
    ; $Dec - Anzahl Dezimalstellen (-1 bedeutet ungerundete ausgabe, 0 ist äquivalent zur standard Random Flag 1)
    ; $Reset - Wird benutzt um den Startwert zu setzen.
    Func _Random($Min = 0, $Max = 1, $Dec = -1, $Reset = 0)
    Local Static $Nr = $Reset ; $Nr = Laufnummer
    If $Reset Then $Nr = $Reset ; Reset ?
    $Nr = Mod((7141 * $Nr + 54773), 259200) ; Berechnung
    If ($Dec + 1) Then Return Round(($Nr/259200) * ($Max - $Min) + $Min, $Dec) ; Runden auf X Dezimalstellen.
    Return ($Nr/259200) * ($Max - $Min) + $Min ; Ungerundete Rückgabe
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; $i - Startwert
    Func _SetRandom($i)
    _Random(0, 1, -1, $i)
    EndFunc

    [/autoit]

    lg
    M