AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Random: Delphi vs. Lazarus?

Ein Thema von AlexII · begonnen am 30. Jan 2014 · letzter Beitrag vom 7. Feb 2014
Antwort Antwort
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#1

AW: Random: Delphi vs. Lazarus?

  Alt 31. Jan 2014, 11:34
Es sei denn du hattes den Fehler der Fehler gemacht und Randomize zu häufig aufgerufen.
Ja, wie oft soll ich es noch sagen? Deshalb hatte ich ja gefragt, ob er den Fehler vielleicht auch gemacht hat. Nicht nur ich hab den Fehler damals gemacht, ich hab ihn auch bei anderen Anfängern schon öfters gesehen...

Denn an sich wüsste ich nicht, wieso das normale Delphi-Random sonst „schlechte“ Zufallsfolgen ausspucken sollte. Der RNG taugt vielleicht nicht für kryptografische Zwecke, aber bemerkbare Regelmäßigkeiten treten da eigentlich nicht auf (anders als z.B. beim Standard-random von PHP).
  Mit Zitat antworten Zitat
creed steiger

Registriert seit: 2. Dez 2009
116 Beiträge
 
#2

AW: Random: Delphi vs. Lazarus?

  Alt 31. Jan 2014, 14:48
Dazu gabs eine längere Diskussion auf der FPC Mailinglist
http://lists.freepascal.org/lists/fp...er/031464.html
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.373 Beiträge
 
Delphi 12 Athens
 
#3

AW: Random: Delphi vs. Lazarus?

  Alt 31. Jan 2014, 15:37
Früher ging Randomize mal auf GetTickCount, welches meistens in einem Intervall von 16 Millisekunden hochzählte. (glaub ich)

Aber da Zuviele zuviele Fehler machenten, wurde es umgebaut.
Inzwischen wird wohl QueryPerformanceCounter verwendet, damit sich solche Fehler nicht all zu sehr auswirken.
Und für die, welche Randomize vergessen aufzurufen, macht das jetzt die VCL einmal, beim Start.


Man könnte zwar Randomize oder den Seed öfters aufrufen/setzen, aber der Zufallsgenerator hat irgendwie soeine durchschnittliche "Gleichverteilung" und diese Verteilung der Zufallswerte könnte man damit negativ beeinflussen.
Also, im Normalfall kommen alle Zufallszahlen, über einen ausreichend großen Bereich hinweg, ungefähr gleich oft vor.


Ein "Vorteil" am Delphi-Random ist, daß man, ausgehend von einem bestimmten Seed, immer die selben Zahlen bekommt. (solange keiner die zugrundeliegende Berechnung verändert)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (31. Jan 2014 um 15:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Random: Delphi vs. Lazarus?

  Alt 31. Jan 2014, 15:46
...und diese Verteilung der Zufallswerte könnte man damit negativ beeinflussen.
Ist der Seed unterschiedlich, sollte das völlig egal sein.
Gruß
Cookie
  Mit Zitat antworten Zitat
Gutelo

Registriert seit: 29. Sep 2013
152 Beiträge
 
#5

AW: Random: Delphi vs. Lazarus?

  Alt 31. Jan 2014, 16:49
Namenloser,

wenn du moechtest kannst du mal folgendes ausprobieren:

1) Lasse dir ein paar Millionen Lottotips generieren fuer Lotto 6 aus 49
2) Danach erstelle eine Statistik fuer die Zahlen 1 bis 49 an welcher Stelle die Zahl in jedem Tipp vorkommt. Plotte die resultierenden sechs Hauefigkeitskurven (erste Stelle, zweite Stelle, ...) ueber die Zahlen 1 bis 49.

Wenn du das einmal mit Delphi random machst und einmal mit einem besseren Generator machst wirst du sehen dass die Delphi random Werte schlecht sind und die Statistik stark verzerren.
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Random: Delphi vs. Lazarus?

  Alt 1. Feb 2014, 08:46
Früher ging Randomize mal auf GetTickCount, welches meistens in einem Intervall von 16 Millisekunden hochzählte. (glaub ich)
GetTickCount zählt zumindest auf NT Systemen in Millisekunden hoch, da es auf dem genaueren internen Counter des Kernels aufsetzt, siehe auch hier, Zeile 445.

Ein "Vorteil" am Delphi-Random ist, daß man, ausgehend von einem bestimmten Seed, immer die selben Zahlen bekommt. (solange keiner die zugrundeliegende Berechnung verändert)
FPC's Random hat die selbe Eigenschaft (ist ja schließlich auch ein PRNG).

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#7

AW: Random: Delphi vs. Lazarus?

  Alt 1. Feb 2014, 09:37
Früher ging Randomize mal auf GetTickCount, welches meistens in einem Intervall von 16 Millisekunden hochzählte. (glaub ich)
GetTickCount zählt zumindest auf NT Systemen in Millisekunden hoch, da es auf dem genaueren internen Counter des Kernels aufsetzt, siehe auch hier, Zeile 445.
Hab ich kein NT-System? Na, zumindest habe ich kein ReactOS.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  c0,c,c1 : Cardinal;

begin
  c := GetTickCount;
  c0 := c;
  repeat
    c1 := GetTickCount;
    if c<>c1 then begin
      memo1.lines.add(intToStr(c-c0));
      c := c1;
    End;
  until c1-c0>100;
end;
Zitat von MemoBox1:
0
15
31
47
62
78
93
16ms war schon immer so.
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#8

AW: Random: Delphi vs. Lazarus?

  Alt 1. Feb 2014, 11:42
"The resolution of the GetTickCount function is limited to the resolution of the system timer, which is typically in the range of 10 milliseconds to 16 milliseconds."

http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:25 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