Auflösung des Zufallsgenerators

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Auflösung des Zufallsgenerators

Beitrag von RSE »

Wie groß ist eigentlich das Auflösungsvermögen des Zufallsgenerators und wodurch wird dieses evtl. beeinflusst? Kann man bei Random(300000) noch davon ausgehen, dass alle Zahlen von 1 bis 300000 mit gleicher Wahrscheinlichkeit gezogen werden können?
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Auflösung des Zufallsgenerators

Beitrag von Hitman »

--> http://en.wikipedia.org/wiki/Mersenne_twister" onclick="window.open(this.href);return false;

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Re: Auflösung des Zufallsgenerators

Beitrag von RSE »

Möchtest du mir damit sagen, dass der Zufallsgenerator von Freepascal plattformunabhängig gleich und nach dem Mersenne-Twister Verfahren arbeitet? Dann gibt es da offenbar noch mehrere Varianten davon...
Irgendwie beantwortet das nicht meine eigentliche Frage. Irgendwo in dem Text hab ich gelesen, dass es eine Variante mit voller 32bit-Auflösung gibt. Es ist aber auch kein einziges Wort über den fpc gefallen.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Auflösung des Zufallsgenerators

Beitrag von Hitman »

Lazarus hat da ein hervorragendes Feature: Strg+LinksKlick mal auf "Random" ... ;-)

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Auflösung des Zufallsgenerators

Beitrag von pluto »

dass alle Zahlen von 1 bis 300000 mit gleicher Wahrscheinlichkeit gezogen werden können?
Es ist halt ein Zufall. Du kannst nicht davon ausgehen das jede Zahl einmal gezogen wird. Einige werden bevorzugt z.b. die sieben *G*. Du musst selbst eine Liste erstellen mit den gezogen Werten wenn du alle Zahlen von n bis x haben möchtes. Daher kann man nicht mit "gleicher Wahrscheinlichkeit" rechnen.
MFG
Michael Springwald

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Re: Auflösung des Zufallsgenerators

Beitrag von RSE »

@Hitman: Ich weiß, wie man sich die Implementierung einer Funktion ansehen kann. Ich stelle nun fest, dass dabei offenbar auf keinerlei Betriebssystemfunktionalität zurückgegriffen wird (was ich vermutet hätte), sondern alles direkt implementiert ist. Ich kann/will allerdings weder der Implementierung des Algorithmus so genau folgen, dass ich mir das selbst herleiten kann. Was da tatsächlich warum passiert, interessiert mich auch nicht wirklich. Ich kann mir aus dem Code allein nicht herleiten, ob Random nun über 32bit oder gar 64bit eine Gleichverteilung liefert.

@pluto: gleiche Wahrscheinlichkeit und Gleichverteilung sind Begrifflichkeiten aus der Wahrscheinlichkeitstheorie, die besagen, dass jeder Wert aus dem Universum mit der gleichen Wahrscheinlichkeit auftreten kann. Ein idealer Würfel würfelt zum Beispiel jede Zahl mit der gleichen Wahrscheinlichkeit. Das heißt nicht, dass jede Zahl genauso oft fällt, sondern lediglich, dass bei unendlich vielen Würfen jede Zahl etwa gleich oft fällt und nicht die 6 doppelt so oft wie die 1. Dabei kann es bei abzählbar vielen (oder: wenigen) Würfen durchaus vorkommen, dass 3x die 6 nacheinander fällt, bei einem sechsflächigen Würfel entspricht dieser Fall einer Wahrscheinlichkeit von (1/6)^3 = 1/216 = rund 0,463%, also ziemlich unwahrscheinlich, aber möglich.

Meine Frage ist also: Kann Random wirklich eine Gleichverteilung über die gesamten 32 oder 64 bit liefern, oder werden da bestimmte Werte mit geringerer Wahrcheinlichkeit auftreten? Ein Ja reicht mir als Antwort, bei einem Nein würde ich mich über eine einfache Auflistung der Einschränkungen freuen. Ein Test an nur einem Computer/ einem Betriebssystem etc. wäre nicht unbedingt wasserdicht, daher die Frage.

Ich kann mich an die Anfänge meiner Programmiertätigkeit erinnern, da hat mal ein Freund in TurboPascal aus Jux ein Programm geschrieben, das auf dem Grafikbildschirm folgendes Programm geschrieben hat:

Code: Alles auswählen

wähle zufälligen Pixel
tue bis abbruch:
  färbe aktuellen Pixel in zufälliger Farbe
  wähle einen zufälligen benachbarten Pixel als neuen aktuellen Pixel
Diesem Programm haben wir dann zugesehen (damals waren die Rechner noch so langsam!) und nach ein paar Minuten war ein immer wiederkehrendes Muster erkennbar. Man hat mir damals gesagt, dass das mit der Generierung der Zufallszahlen zu tun hat, die sich unter anderem auf die Uhrzeit stützt und nun mit der immergleichen Schleife im Programm (immergleicher zeitlicher Abstand zwischen 2 Zufallszahlengenerierungen) Effekte auftreten lässt, so dass diese Muster entstehen. Heute kann ich mir denken, dass das vielleicht eher damit etwas zu tun hat, dass rechnergenerierte Zufallszahlen nur Pseudo-Zufallszahlen sind. Was das aber genau heißt, weiß ich nicht.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Auflösung des Zufallsgenerators

Beitrag von pluto »

Random liefert legendlich zahlen zwischen 0 und 1. Wenn du einen Parameter angibst sucht er sich eine Zahl aus zwischen 0 und X. Dabei kommen Theoretisch alle Zahlen vor, die diesen Zahlenraum betreffen. Jedoch nur Theoretisch. Unter Windows ist mir aufgefallen das bestimmte zahlen bevorzugt werden. Welche das waren weiß ich nicht mehr. Teste es doch mal unter Lazarus. Einmal den Zufalls Generator Inisiieren und dann in einer Forschleife Random aufrufen. Sollte man zwar nicht machen, weil dann die Wahrscheinlichkeit fällt, zufällige Zahlen zu erhalten, jedoch kannst du ja ein Sleep(10) einbauen. Weil Random basiert auf die Zeit die seit dem System Start vergangen ist.
MFG
Michael Springwald

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Re: Auflösung des Zufallsgenerators

Beitrag von RSE »

pluto hat geschrieben:Weil Random basiert auf die Zeit die seit dem System Start vergangen ist.
Weißt du das sicher? Oder stammt diese Info noch aus TP-Zeiten, wie bei mir? Im Quelltext ist nämlich keinerlei Zeitabfrage erkennbar. Da aber der Quelltext nicht sooo übersichtlich ist, dass man diese Sachen alle problemlos und sicher nachvollziehen kann, würde ich das gerne von jemandem erfahren, der sich damit schon beschäftigt hat.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Auflösung des Zufallsgenerators

Beitrag von pluto »

Weißt du das sicher?
Wenn du so fragt: Sicher bin ich mir natürlich nicht, nur habe ich in einem Java Buch mal gesehen, dass es dort mit der System Zeit gemacht wird. Unter Delphi wird es meine ich auch so gemacht.

Für was möchtest du den Random verwenden ?
MFG
Michael Springwald

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Re: Auflösung des Zufallsgenerators

Beitrag von RSE »

Es interessiert mich einfach mal.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Auflösung des Zufallsgenerators

Beitrag von Hitman »

pluto hat geschrieben:Weil Random basiert auf die Zeit die seit dem System Start vergangen ist.
Jain ... Randomize nutzt GetTickCount als (initiales) RandSeed.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Auflösung des Zufallsgenerators

Beitrag von pluto »

Jain ... Randomize nutzt GetTickCount als (initiales) RandSeed.
und was macht GetTickCount ? Richtig, GetTickCount gibt die Zeit in MS zurück seit das System gestartet wurden ist.
MFG
Michael Springwald

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Auflösung des Zufallsgenerators

Beitrag von Hitman »

Ja, aber das betrifft nur die Initialisierung (Randomize) und nicht die spätere Pseudozufallszahlengenerierung (Random).
Anders gesagt: die Systemzeit bestimmt den Startwert, hat aber keine Einfluss auf die späteren Schritte.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Auflösung des Zufallsgenerators

Beitrag von pluto »

Einer konnte dank einer Datenbank die Zahlen-Reihen die Random liefert vorhersagen. Ich glaube das war einer aus der DP. Also ist das doch kein wirklicher Zufall.
MFG
Michael Springwald

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Auflösung des Zufallsgenerators

Beitrag von Hitman »

Warum hab ich wohl Pseudozufallszahlen gesagt? ;) Es gibt keinen wirklichen Zufall mit unserer Rechentechnik - es ist nunmal alles berechenbar. Man kann lediglich den Aufwand in die Höhe treiben. Aber es bleibt Pseudozufall.

Antworten