![]() |
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!) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:02 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