Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Randomize Algorihtmus


Chris Maslowski - Mo 20.02.06 17:27
Titel: Randomize Algorihtmus
Hallo,
oft kommt es ja vor das man eine zufällige Zahl braucht. Aber wie sicher ist diese Randomize Funktion bei Delphi? Also ist sie wirklich zufällig und weiß vielleicht jemand wie der Algorithmus dafür funktioniert?
Weiß jemand auch vielleicht wie man einen Algorithmus kontrolliert, also testen kann wie gut er funktioniert?
Kennt ihr andere Algorithmen zur Zufallszahl?`
Schon mal Danke Gruß
Chris


WASEO - Mo 20.02.06 18:03

Hallo!

Bei Delphi kann man mit Randomize die Zufallszahlen initialisieren. Soweit ich weiss, wird einfach die Uhrzeit als Zahl genommen und auf dieser Basis nach einem bestimmten Algorithmus Zufallszahlen generiert. Wenn man testen will, wie gut der ist, läßt man einfach sein Programm so lange Zufallszahlen generieren, bis dieses eine Wiederholung feststellt (z. B. könnte man ein Memo mit Zufallszahlen füllen und dann in bestimmten Zeitabständen testen, ob sich die ersten 3 Zahlen nacheinander irgendwo in Memo.Lines.Text wiederholen).

Ansonsten schaumalguckeda:
Zufallszahlen ohne Wiederholung generieren [http://www.swissdelphicenter.ch/de/showcode.php?id=1006]


Chris Maslowski - Mo 20.02.06 18:26

Also hat der Algoritmus eine Ungenauigkeit. Denn wenn man eine Zufallszahl beispielsweise für Lottorie braucht zieht man die Zahlen immer zur selben Zeit und somit sind einige Zahlen wahrscheinlicher als andere.
Ich probier das Mal aus wie genau der Algoryhtmus nun ist.


alzaimar - Mo 20.02.06 20:16

Nein! Random ist hinreichend gleichverteilt. Randomize sollte nur beim Programmstart einmalig aufgerufen werden. Random selbst generiert über eine realtiv einfache Funktion Pseudozufallszahlen. 'Pseudo' deshalb, weil sie eben keine echten Zufallszahlen (wie ein Würfel) erzeugt.

Keine Bange, die Zahlen sind gleichmäßig verteilt und wiederholen sich erst nach (weiss nicht genau) 65000 Zahlen.

Und bei einem 'Random (100)' bestimmte Zahlen doppelt vorkommen, dann ist das Zufall. So, wie es sein soll. Du kannst ja auch 10x hinereinander eine 6 würfeln, oder?

Nochmal: Randomize verwendet die Systemzeit, soll aber nur 1x beim Programmstart aufgerufen werden. Und auch nur dann, wenn man wirklich jedesmal andere Zufallszahlen will. Random ist eine einfache Funktion, ich meine sie ist linear, aber ich hab den Code nicht gefunden.