Autor Beitrag
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Fr 13.05.05 15:28 
[meta]zufall random wiederholen wiederholt[/meta]
ich habe das thema nur erstellt falls es leute gibt die nach zufall suchen hier drauf stoßen

die delphi random funktion wiederholt sich nach einem durchlauf von 0 bis high(dword)

beweis:
www.uall.info/files/randomtest.zip

(das soll hier jetzt keine neue diskussion werden)

Moderiert von user profile iconraziel: Meta-Tags hinzugefügt.

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Fr 13.05.05 17:08 
Auch nur eine Zusatzbemerkung:
Delphi benützt einen Linear Congruential Generator; der wohl simpleste (aber auch schlechteste) Randomgenerator, den es überhaupt gibt.
Wie user profile iconuall@ogc schon gesagt hat, ist die Periodenlänge genau 2^32 (für jeden Seed). Und es wird während einer Periode niemals eine Zahl doppelt gezogen. Dies gilt für "random()" (welche eine Gleitkommazahl zwischen 0 und 1 zurückgibt).

Das random(MaxRand) ist meines Wissens äquivalent zu Trunc(random*MaxRand). Daraus folgt, dass die Periodenlänge dort ebenfalls 2^32 ist; aber es können für MaxRand<2^32 natürlich Zahlen mehrfach gezogen werden.

Delphi-Random-Generator veranschaulicht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var
 I: DWord;
 MyRand: DWord;
begin
 randseed := 0;
 for I := 1 to 10 do // 10 Random-Zahlen ausgeben
  Memo1.Lines.Add(FloatToStr(random));
 // äquivalent zu:
 MyRand := 0;
 for I := 1 to 10 do
 begin
  MyRand := MyRand*134775813+1;
  Memo1.Lines.Add(FloatToStr(MyRand/4294967296.0));
 end;
end;
Tobias1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 454

Win 98, XP Prof
D3 Prof, D2005 Prof
BeitragVerfasst: Fr 13.05.05 17:34 
Gibts da von Delphi auch noch ein anderer Generator der besser ist?

_________________
Auch das schlechteste Buch hat seine gute Seite: die letzte. (John Osborne)
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 13.05.05 21:20 
Nein, von Delphi selber nicht, aber das DEC Part I von Hagen Reddmann (User negaH in der DP) bietet einen PRNG mit einer Periode von 2^4096-1 IIRC.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Fr 13.05.05 21:25 
Lagged Fibonacci Generatoren haben eine viel, viel längere Periode (als der Delphi Random Generator). Kann man im Prinzip selbst programmieren (meines Wissens nicht mehr als 10 Zeilen nötig). Oder im Google suchen.
Fabian W.
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1766

Win 7
D7 PE
BeitragVerfasst: Sa 14.05.05 07:52 
Genau das wollte ich fragen. Hats sich schonmal jemand einen Generator programmiert? Ich bin mit random nicht zu frieden, da bei mir auf ca 100 random durchgänge (von 0 bis 20) mind 25x die gleiche Zahl kommt.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Sa 14.05.05 14:43 
user profile iconFabian W. hat folgendes geschrieben:
Genau das wollte ich fragen. Hats sich schonmal jemand einen Generator programmiert? Ich bin mit random nicht zu frieden, da bei mir auf ca 100 random durchgänge (von 0 bis 20) mind 25x die gleiche Zahl kommt.

Ich weiss, du wurdest schon öfters kritisiert wegen solchen Posts. Ich tue es jetzt auch: Wenn du überhaupt mal nach einem anderen Generator gesucht hättest, wärst du schon lange fündig geworden (Google). Ausserdem hat BenBE einen konkreten Generator vorgeschlagen.
Übrigens: Die Wahrscheinlichkeit, dass deine Aussage wahr ist, ist verschwindend gering (1:70 Mia). Ich muss den Random-Generator von Delphi auch etwas verteidigen: Für alltägliche Zwecke sollte der Random-Generator von Delphi völlig ausreichen. Erst wenn man Monte-Carlo Sampling (o.ä.) in höheren Dimensionen macht, oder sehr, sehr viele Random-Zahlen benötigt, dann stösst man mit dem Random-Generator von Delphi an die Grenzen.
Ich entschuldige mich, wenn ich falsch liege. Und: Ein persönlicher Angriff ist's übrigens nicht (damit jetzt kein Streit ausbricht).

PS: :arrow: Informationen über Lagged Fibonacci Generatoren.


Zuletzt bearbeitet von delfiphan am Sa 14.05.05 21:08, insgesamt 1-mal bearbeitet
zemy
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 207

Win XP Prof.
D7
BeitragVerfasst: Sa 14.05.05 16:46 
Habe einen anderen schönen Generator gefunden. Scnell, lange Periode (2^19937-1), übersetzt in andere Priogrammiersprachen, u.a. Delphi. Werde mr den Code mal zu gemüte führen...

der Link: www.math.sci.hiroshi...p/~m-mat/MT/emt.html

Zitat:
Genau das wollte ich fragen. Hats sich schonmal jemand einen Generator programmiert? Ich bin mit random nicht zu frieden, da bei mir auf ca 100 random durchgänge (von 0 bis 20) mind 25x die gleiche Zahl kommt.


Komme auf ne Wahrscheinlichkeit von ca. 1,2%... Unwahrscheinlich (seeeeehhhr unwahrscheinlich) aber möglich..

_________________
LifeIsToShortToThinkAboutTheShortness
hallo
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 450

WIN XP, SuSE 9.3
D3 Prof, D6 Pers, 2005 Pers
BeitragVerfasst: Mi 08.06.05 17:33 
Das Delphirandom hängt von der Uhrzeit ab!

D.h.: Wenn ich in einer ms 10 mal random(x) ausführe, bekomm ich immer den gleichen Wert zurück!!!

_________________
Der beste je Programmierte Trojaner: Windows XP
Wäre es nicht adequat, den Usus heterogener Termini zu minimieren?
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mi 08.06.05 22:42 
user profile iconhallo: Die Funktion Randomize dient dazu, den Random-Generator zu initialisieren. Die Funktion solltest du nur einmal pro Programmstart ausführen; nicht vor jedem Aufruf von random.
Dein Problem kannst du also beheben, in dem du Randomize nur noch einmal, d.h. beim Programmstart ausführst.
hallo
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 450

WIN XP, SuSE 9.3
D3 Prof, D6 Pers, 2005 Pers
BeitragVerfasst: Do 09.06.05 16:30 
Achsooo! Ok, ich werds nicht mehr vergessen!!! :oops:

_________________
Der beste je Programmierte Trojaner: Windows XP
Wäre es nicht adequat, den Usus heterogener Termini zu minimieren?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 09.06.05 16:46 
Steht aber auch in der Hilfe. Musst du dir also nicht unbedingt merken. ;)
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Do 09.06.05 17:03 
aber kann man nicht sowas machen, wenn zb ziffern generiert werden sollen kann man doch
2 zufallszahlen generieren lassen, und diese multiplizieren, diese zahl wandelt man in einen string um und wählt draus eine zufallsziffer, wäre das besser oder ist das irrsinn ?
hallo
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 450

WIN XP, SuSE 9.3
D3 Prof, D6 Pers, 2005 Pers
BeitragVerfasst: Do 09.06.05 17:35 
Wenn man übrigens aus einer Zahl eine Zufallszahl BERECHNEN will, dann macht man einfach
ausblenden Quelltext
1:
zahl mod maximalwert					


So wird aus zahl ein Wert generiert. Wenn man 3 als Maximalwert angibt, dann kann 0,1,2 rauskommen.

Falls als Maximalwert 0 eingegeben wird, schlägt es aber mit einer Division by zero fehl!!!!

Wollt ich hier nur mal erwähnen!

_________________
Der beste je Programmierte Trojaner: Windows XP
Wäre es nicht adequat, den Usus heterogener Termini zu minimieren?
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Do 09.06.05 18:43 
wieso des ? und was ist zahl ?
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Do 09.06.05 20:36 
user profile iconhallo hat folgendes geschrieben:
Wenn man übrigens aus einer Zahl eine Zufallszahl BERECHNEN will, dann macht man einfach [mod].

Mod hat nicht viel mit Zufall zu tun. Es gibt dir einfach der Rest der Division zurück. mod b ist equivalent zu a-(a div b)*b bzw. and (b-1), falls b eine Zweierpotenz ist (b>0).
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: So 12.06.05 13:10 
@hallo:aber dann sollte sich doch zahl verhändern oder nicht ?

_________________
MFG
Michael Springwald, "kann kein englisch...."