Re: Wie zufällig ist Random(x)?
Zufallszahlen die mit random() erzeugt wurden sind nicht zufällig. D.h. jede einzelne und sequentiell erzeugte Zahl ist überhaupt nicht zufällig, sondern musste exakt beim aktuellen Aufruf von Random() berechnet werden.
ABER, um diese "Zufälligkeit" geht es im Grunde garnicht, es ist sogar gut so. Das was Random() mathematisch machen soll ist das es nichtzufällige Zahlen produziert deren statistische Verteilung/Wahrscheinlichkeit, ihre Häufigkeit und ihr Auftauchen, eben einer Zufallsverteilung entspricht. Die erzeugten Zahlen sind also keinesweigs zufällig, aber eine beliebige Menge von Zahlen die mit Random() erzeugt wurden, sollte immer nach Zufall aussehen. Die statistischen Eigenschaften der Menge sollte dem Zufall entsprechen. Es gibt aber auch Hardware Generatoren, sei es als extra Hardware oder über das Internet. Im WEB gibt es einfachste API's per HTTP um eine Anzahl von Zufallsbits bei bestimmten Servern abzufragen. Meistens wurden diese per radioaktivem Zerfall erzeugt. Wir kommen damit auch zum Problem der Hardware-Generatoren. Ja, sie basieren auf angeblich zufälligen Ereignissen, wie dem Rauschen einer Diode oder dem Zerfall radioaktiver Elemente. Das Problem dabei ist aber das das nur per Axiom, also physikalischen Beobachtungen, ABER NICHT durch mathematische Beweise exakt als Zufällig bewiesen wurde. Deshalb gilt in den meisten Anwendung das ein guter Pseudo-Zufallsgenerator, mit exakt nachvollziehbaren mathematischen Eigenschaften, JEDEM Hardware-Zufalls-Generator vorzuziehen ist. D.h. obwohl Random() eben NICHT zufällig Zahlen produziert, ist das besser als echt zufällige Zahlen zu benutzen. Der Algorithmus von Random() kann ganz exakt mathematisch bewiesen werden, und mit den entsprechenden Parametern kannst du dir 100%tig sicher sein das die durch Random() erzeugten Zahlen als Menge den Eigenschaften von Zufall entsprechen. Bei einem Hardwaregenerator stützt man sich auf angeblich = beobachtete zufällige Ereignisse. KEIN Mensch kann heutzutage den Zerfall radioaktiver Elemente oder das Rauschen einer Diode vorhersagen, aber das heist nicht das es nicht möglich wäre. Wir stützen uns also bei HW-RNG's auf physikalische Ereignisse die sich der Mensch NICHT vollständig erklären kann. Nun, für viele Anwendungen ist eine solche Basis von Zufall unerwünscht. Die Random() Funktion benutzt einen LCG = Linear Congruential Generator. Man kann Pseudo-RNG's bauen die mathematisch so beweisbar sicher sind das man als Aussenstehnder die Folge der produzierten Zahlen nur dann bestimmen kann wenn man den Startwert=Seed des RNG's kennt. Wird dieser Seed geheim gehalten, dann sind die produzierten Zahlen immer noch pseudo-zufällig, aber denoch ist die Komplexität des benutzten Algorithmus dann so hoch das kein Mensch oder Maschine in der Lage wäre eine Vorhersage der nächsten Zahlen zu machen. Der Vorteil von solchen math. Verfahren gegenüber Hardware-Generatoren, ist eben der Punkt das ALLE Eigenschaften EXAKT mathematisch beweisbar und somit die notwendigen Parameter und Schranken kalkulierbar sind. Dies ist bei HW-RNGs nicht der Fall. Philosophisch gesehen gibt es keine Zufälle, egal welche Ideologie man vertitt. In diesem Punkt sind sich Christen, Buddhisten, Marxisten usw. alle einig. Der einzigste Unterschied zwichen Pseudo-Zufall und echtem Zufall besteht in der Komplexität und unserem Wissensstand. Gruß Hagen |
Re: Wie zufällig ist Random(x)?
Meines Wissens ist die Ermittlung von Pseudozufallszahlen eine Kombination von Stephans Darstellung (komplizierter Mathe-Algo) und der Zeitnahme aus dem System.
Die Berechnung geht immer von einer bestimmten Zahl aus, um die nächste Zufallszahl zu berechnen. Bei fortlaufender Berechnung ist dies jeweils die zuletzt ermittelte Zufallszahl. Die Zeit spielt hierbei nur beim Start des Algorithmus eine Rolle. Sie stellt nämlich die Zahl bereit, mit der das Ganze losgeht. Deswegen kommt (kam?) ohne Randomize auch immer die gleiche Folge von Zufallszahlen bei raus. Niels |
Re: Wie zufällig ist Random(x)?
Zitat:
|
Re: Wie zufällig ist Random(x)?
wie schon gesagt wurde: es wird mit hilfe der Uhrzeit und Datum gemacht. Allerdings nur wenn man vorher randomize; eingegeben hat(egal wo, es muss nur audgeführt werden(am besten in Form.Create))
ich hab mal in einem php-buch gelesen, wenn man etwas mit session ids machen möchte kann man anstatt sessid() auch random benutzen, weil das sich auf die zeit und das datum des servers bezieht und somit diese zahl/code eindeutig ist(die uhrzeit steht nicht drin, aber angeblich kommt diese Zahl/string nicht noch einmal vor) |
Re: Wie zufällig ist Random(x)?
Hallo zusammen,
Ich hatte bei meiner schriftlichen Matura (Abi) unter anderem die Aufgabe auf einem C167-Controler einen Würfel zu realisieren. Ich habs so gemacht, dass ich mit einem Taster einen digitalen Eingang angesteuert habe. Ab der steigenden Flanke hab ich begonnen die Zeit zu zählen, bis der Taster wieder losgelassen wurde. Ne Modulo-Operation drüber, um auf 1-6 zu kommen und fertig war der pseudozufällige Würfel. Ähnlich wirds vermutlich hier auch laufen. Außer der Zeit muss sich nichts ändern. grüße, daniel |
Re: Wie zufällig ist Random(x)?
Zitat:
|
Re: Wie zufällig ist Random(x)?
Dann hab ich nix gesagt. :oops:
Ich dacht halt, das das was damit zu tun haben könnte. |
Re: Wie zufällig ist Random(x)?
Meines wissens nach wird die Random(x) Funktion über eine Mathematische Formel berechnet, die aber immer bei 0 startet. Das hat zur Folge, dass man unter umständen (zB bei Timer Einsatz) immer die gleichen Zahlen erhält.
Ich nutze inzwischen immer die Randomize(x) Funktion Da startet es immer bei einer anderen Zahl... Gruß Thomas |
Re: Wie zufällig ist Random(x)?
Zitat:
Ich verwende immer randomize und danach random(x), deine Funktion kennt Delphi su aich nicht. ;) |
Re: Wie zufällig ist Random(x)?
Ich habe einmal ein Lotto spiel in delphi (3 glaub ich) programmiert und je nach tag und uhrzeit kamen da manche zahlen häufiger vor als andere , manche soager nur ein bis zweimal in mehreren tausend durchgängen
MfG tn249 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz