![]() |
Zufallsfunktion selbst schreiben... kann jemand helfen?
Hallo,
wie funktionieren eigenltich ramdomfunktionen? also ich weiss, dass es in jeder(vernunftigen) Programmiersprache eine Randomfunktion gibt, aber was für eine Idee ist es, die dahinter steckt? Gruß Mojo :coder2: |
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
Bin zwar kein Profi dadrin. Hoffe aber ich erklär das richtig:
Es gibt sowas wie eine globale Variable, die am Anfang 0 ist und bei jedem aufruf der Random-funktion um eins erhöht wird. Aus dieser Zahl wird mit einem Algorithmus, der immer möglichst verschiedene Zahlen ausgibt, das random errechnet. Sieht man auch sehr gut, wenn man diesen Code ausführt:
Delphi-Quellcode:
Es wird immer rauskommen:
procedure TForm1.Button1Click(Sender: TObject);
begin Listbox1.Items.Add(inttostr(random(1024))); end; Zitat:
Durch randomize wird der globalen Zählerariable ein Wert zugewießen, der anhand von Gettickcount errechnet wird |
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
hi,
also so weit ich weiss hängt das irgendwie mit der Systemzeit ab ! Diese wird ausgelesen und anhand der immer verschiedenen Zeit (vielleicht in Millisekunden oder sogar Takte) eine Zufallszahl generiert ! Aber genau hab ich mich auch noch nicht damit beschäftigt ! cu, stefan2005 //Edit: Zu spät :wink: |
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
So wie es Sleepy erklärt hat kommt es schon hin, allerdings kommt nicht immer diese Zahlenfolge raus - da:
Das mit der Systemzeit stimmt auch nur bedingt, undzwar wird beim Aufruf von Randomize die Systemzeitgenommen und als Startwert an den Zufallsgenerator übergeben Zitat:
Und Random, RandomRange... errechnen dann den Wert Also es wird immer wieder die gleiche Zahlenfolge zurückgegeben, aber nicht das ihr das jetzt so einfach hinnehmt, denn Zitat:
Der große Lottogenerator arbeitet deßhalb auch nicht auf diesem Prinzip, da ja so die nächsten Lottozahlen rein theoretisch irgendwann mal vorhergesagt werden könnten - dort wird gewissermasen das nicht vorhersehbare Eigenschwingverhalten von Transistoren gemessen... |
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
Zitat:
|
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
*kram c-buch raus und übersetz in pascal*
Zitat:
Delphi-Quellcode:
ich hoffe ich hab das richtig übersetzt, da es in besagtem buch als c++-klasse dargestellt war...
const
m=10000000; m1=10000; var a:longint; function mult(p, q:longint):longint; var p1, p0, q1, q0:longint; begin p1:=p/m1; p0:=p mod m1; q1:=q/m1; q0:=q mod m1; result:= (((p0*q1+p1*q0) mod m1)*m1+p0*q0 mod m; end; procedure seedrand(seed:longint); begin a:=seed; end; function getrandom:longint; const b=pi*10000000; begin result:=(mult(a,b) +1 ) mod m; inc(a);//die zeile is von mir, da man sonst seed immer wieder aufrufen müsste..... end; |
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
ps: echte zufallszahlen kannst du z.b. dadurch erhalten, dass du eine zeitlang die mausbewegungen abfängst und aus den koordinaten deine zahl berechnest. ziemlich unmöglich das zu reproduzieren!
|
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
trotzdem: es gibt KEINE echten zufallszahlen (jedenfalls nicht in der informatik)
du kannst (theoretisch) ALLES reproduzieren und mit entsprechenden logs genau nachvollziehen, wie es zu dieser zahl gekommen ist.. aber es ist klar das die heutigen methoden gut genug bzw völlig ausreichend sind für die meissten anwendungen.... |
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
oh doch es gibt auch in der informatik echte zufallszahlen. stell dir vor du fährst mit dem auto über eine buckelpiste, misst die federungsbelastung, nimmst das blöcken einer schafherde auf und berechnest aus diesen werten eine zufallszahl - die ist nicht reproduzierbar!
|
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
Zitat:
Zitat:
ich mein also in der informatik erstellte, ohne "reale"/"weltliche" oder was auch immer "inputs" (wer verstanden hat was ich meine: repekt!) |
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
Zitat:
Echter Zufall gibt es möglicherweise in der Quantenwelt - aber auch hier ist man sich nicht sicher, ob es nicht doch ein Muster gibt, dass wir nur nicht finden können. |
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
auch wenn die herstellung nur halbinformatisch ist - trotzdem, mit welchem noch so großem aufwand wilst du bitteschön genau das gleiche schafeblöken herstellen (*g*) wie zum zeitpunkt der "echten" produktion?
|
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
ich hab von der echten informatik gesprochen.... :?
klar, so geht das... |
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
Es gibt glaube ich auch Karten für PCs die das elektrische Rauschen, dass durch Quanteneffekte auf jeder Leitung existiert, in einen numerischen Wert wandeln und via Treiber verfügbar machen. (Ich glaube zumindest, dass dieser Effekt dafür ausgenutzt wird.)
Ansonsten ist natürlich theoretisch jede "Zufalls"-Folge reproduzierbar. Es reicht aber im allgemeinen die Wahrscheinlichkeit der Reproduzierbarkeit zu minimieren, und mit einer geeignet großen Anzahl an möglichen Startbedingungen ist das ja schon mal nicht schlecht ;) |
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
Ahoi,
cool, dass sich so viele von euch dazu geäußert haben... interessant, wie das problem von einem oder anderen gelöst wird. :-D also von dem gebiet mit quanten bin ich noch ein stückchen entfernt, finde aber die idee voll toll! :mrgreen: Gruß Mojo |
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
[Senf]
Wenn ich die Uhr meines PCs ablese und dann mit meiner Funkuhr vergleiche, komme ich zu dem Schluß, daß sich erstere wirklich gut eignet, um (nicht reproduzierbare) Zufallszahlen zu erzeugen. :tongue: [/Senf] |
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
Klar und weil praktisch/theoretisch alles reproduzierbar ist, haben die diesen komischen Lottogenerator extrem abgeschottet (ich weiß aber nicht mehr, wie der heißt und wo er steht)
Also dort ham die die Stromversorung gut getrennt Lampen und Fotozellen und es gibt außer 'ner Signalleitung für Start (Zufallszahlen ausgeben) keine weiteren Eingänge und die Ausgänge sind auch sowas wie Lichtschranken, der genaue Aufbau der Platine für die Zufallswerte ist streng Geheim und der gesamte Bereich um den Rechner steht unter strengster Bewachung, somit ist es "extrem" schwer einen Zufallsalgorithmus dafür zu entwikeln, da ja erst viele Zufallszahlen gesamelt werden müssen, um um einen verwentbaren Algo zu erschafen. Und diesen Rechner zu beeinfluße ist auch sogut wie unmöglich. Womit dieses wohl für 'ne Weile als wirklicher Zufallsgenerator angesehn werden könnte. Als einfach Variante könnte man z.B. 8, 16 oder 32 Transistoren verwenden (jenachdem, was für 'ne Auflösung man möchte) und diese in Eigenschingung versetzen wenn man jetzt also den Zustand aller Transistoren auf einmal einließt hat man dann schon eine nette Zufallszahl. |
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
Ich frag mich nur wofür man so genaue "zufällige" Zahlen haben will...
MfG Florian :hi: |
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
oh da gibts viele verwendungszwecke, z.B. zur vertraulichen komunikaion mit diffie-hellman falls dir das was sagt
|
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
Oder für's Glücksspiel und ähnliches - beim Lotto, oder an Automaten sollte es ja möglichst nicht möglich sein die nächstmögliche Kombination zu erraten, bevor sie möglicher Weise auftaucht.
Der "unmögliche" Fall, dass mal jemand die Lösung errechnet sollte ja möglichst unterbunden werden, da es ja sonst für jamanden möglich wäre zu bescheißen....... ![]() |
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
Zitat:
|
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
Da aber jede Zufallszahl eine gerundeter und in einen bestimmten Bereich gezwengter Wert ist, geht da einiges an "unschärfe" verloren, was bedeutet, das sich alles irgendwann mal wiederholen muß ... und wenn es nur ein paar billionen Jahre dauert
|
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
Nö, ist schon klar das die Menge der möglichen Zufallszahlen auf einem Rechner abzählbar endlich sind. Trotzdem bleiben die möglichen Kombinationen selbiger unendlich.
|
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
wenn du 'ne feste Anzahl an Zahlenwerten und auch einen festen Werte bereich hast,
z.B. 6 Werte von 1 bis 49, oder so dann kann es das Wort unendlich in diesem Zusammenhang nicht geben. |
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
OK, dann natürlich nicht. Ein richtiges OS generiert aber meist selber Zufallszahlen und mekrt sich den "RandSeed" über reboot Grenzen, wenn man dann noch einen HW Zufallsgenerator hat dann ist das für CIA- und nicht KGB-Agenten glaubig OK :-).
|
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
Also bei den heutigen Rechnern ist RandSeed auch nur ein Integer mit schlappen 32 Bit, was ja nicht gerade viel ist und nach nur 4.294.967.296 Werten fängt dieses System ja auch wieder von vorne an.
|
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
Leute, ihr seid Programmierer und arbeitet mit wissenschaftlichen Maschinen und nicht wie Zauberer aus dem Märchenbuch mit nem Zauberstab.
Der RNG in Delphi ist ein LCG und hat eine maximale Periode von 2^32, wenn überhaupt. Somit kann man eine Kette von Zufalls-Bits erzeugen die maximal 2^32/unendlich soviele Bits ohne Wiederholung erzeugt wie es unendlich viele Bits gibt. Nun 2^32/unendlich == 0.000000000000000000000000000000000000000...unendl ich mal 0000000000000000000000..., also in Wahrheit erzeugt der 32Bit LCG aus Delphi gerademal nur 0 Prozent an Zufallsbits aus der Menge der unendlichen Zufallsbits. Somit ist deine Aussage das exakte Gegenteil von der tatsächlichen Wahrheit. Man erzeugt also nicht eine unendliche Anzahl von Zufallsbits mit Random(), sondern man erzeugt nur eine verschwindend geringe, ja schon lächerlich geringe Anzahl von Zufallsbits aus der schier unendlich großen Menge aller möglichen Zufallsbits. Will man das mathematisch fast korrekt beziffern so erzeugt Random() fast exakt 0 Zufallsbits aus allen möglichen Zufallsbits. Gruß Hagen |
Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
Zitat:
Später ist das dann nicht mehr wichtig, da ein Entropy-Pool mittels Tastatur, Maus, Interrupt und Blockdevice Zugriffen gefüllt wird und kryptografisch vernünftige Zufallswerte liefern kann. Aber wir schweifen ab... Zitat:
Zitat:
Jetzt ist aber Schluß und morgen gehe ich in die Zauberschule :party: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz