Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Random: Delphi vs. Lazarus? (https://www.delphipraxis.net/178832-random-delphi-vs-lazarus.html)

AlexII 30. Jan 2014 13:09

Random: Delphi vs. Lazarus?
 
Kennt jemand die Unterschiede?
Folgendes habe ich zu der Funktion bei Lazarus gefunden:
Zitat:

The Free Pascal implementation of the Random routine uses the Mersenne Twister to simulate
randomness. This implementation has a better statistical distribution than for example a Linear Congruential
generator algorithm, but is considerably slower than the latter. If speed is an issue, then
alternate random number generators should be considered.
Wie steht es mit dem in Delphi?

hathor 30. Jan 2014 13:25

AW: Random: Delphi vs. Lazarus?
 
DELPHI2009

DELPHI RANDOM

// Quellcode entfernt - seid bitte so gut und veröffentlicht keinen Quellcode aus dem Produkt. Die Sourcen liegen nicht jeder Edition bei und daher dürfen wir sie hier auch nicht - nicht einmal auszugsweise - veröffentlichen. Sorry, ist aber so und ich möchte mich da auch Problemen heraushalten - ich bitte um Verständnis. Daniel

gammatester 30. Jan 2014 13:45

AW: Random: Delphi vs. Lazarus?
 
Der in Delphi und Pascal ist seit langem der gleiche, ein linearer http://de.wikipedia.org/wiki/Kongruenzgenerator
Delphi-Quellcode:
x[n+1] = a*x[n] + 1 mod 2^32;
mit a = $08088405 = 134775813

Edit: der gleiche heißt hier, daß er sich seit TurboPascal 5/6/7 nicht geändert hat, nicht das er der gleiche wie in neueren FPC-Versionen ist.

PC-John 30. Jan 2014 15:10

AW: Random: Delphi vs. Lazarus?
 
Ein Random-Generator?

Ist standardmässig eine mehr oder weniger komplizierte Formel, welche bestimmten Anforderungen genügen muss. Hauptsache bei einer solchen Formel ist, dass sie sich auch nicht im millionsten Durchlauf in eine Ecke drängt, und statistisch gesehen, laufend den ganzen Wertebereich möglichst gleichmässig abdeckt.

Wenn nun Lazarus und Delphi die gleiche Implementation verwenden, wen stört es?
Ich will ja (Pseudo-)Zufallszahlen bekommen, und nicht einen fremden Schlüssel knacken.
Nur schon, wenn ich eine bestimmte Startzahl eingebe, kommt eine gaaaaanz andere Reihenfolge heraus.

PC-John

BUG 30. Jan 2014 17:15

AW: Random: Delphi vs. Lazarus?
 
Um es nochmal zusammenzufassen: Delphi verwendet einen linearen Kongruenzgenerator während FreePascal einen Mersenne Twister benutzt.

Das heißt, dass Delphi einen sehr schnellen, aber für viele ernsthafte Anwendungen von Zufallzahlen unbrauchbaren, Generator hat. Dafür ist der Generator von FreePascal langsamer.

Auf Wikipedia gibt es auch eine schöne Übersicht.

himitsu 30. Jan 2014 18:36

AW: Random: Delphi vs. Lazarus?
 
Für ernsthafte Anwendung kann man ja notfalls auch einen den vielen alternativen Zufallsgeneratoren verwenden.

Im DEC war auch einer drin und wenn es ganz sicher sein muß, dann gäbe es auch spezielle hardwarebasierte Systeme.

AlexII 30. Jan 2014 21:36

AW: Random: Delphi vs. Lazarus?
 
Habe ich richtig verstanden?

Delphi - linearer Kongruenzgeneratoren - 2^32 = schnell, aber nicht sehr sicher.
Lazarus - Mersenne-Twister Pseudozufallszahlengenerator - (2^19937)−1 = langsam, aber dafür viel sicherer?

Also doch sehr unterschiedlich.

BUG 30. Jan 2014 23:07

AW: Random: Delphi vs. Lazarus?
 
Zitat:

Zitat von AlexII (Beitrag 1246048)
langsam, aber dafür viel sicherer?

Was heißt hier sicher? Für kryptographische Anwendungen sind beide Generator-Typen nicht geeignet.
Der Unterschied ist aber trotzdem wichtig, z.B. wenn man randomisierte Algorithmen einsetzen will (Monte-Carlo-Simulation, usw.).

Wenn du Spaß mit Verschlüsselung haben willst, programmiere lieber einen Standard nach :mrgreen:

Gutelo 30. Jan 2014 23:29

AW: Random: Delphi vs. Lazarus?
 
Als Alternative zu Random kannst du auch die GUID von Windows verwenden. Nach meinen Erfahrungen sind die resultierenden Zufallswerte recht gut und liefern auch eine brauchbare Statistik. Hier ein Beispiel:

Code:
// get random number via GUID
function random_GUID(n : integer) : integer;
var Guid : TGUID;
    num : integer;
begin
    CreateGUID(Guid);
    num := Trunc(1 + (n*(Guid.D2/65535)));
    if num = 0 then num := 1;
    if num = n+1 then num := n;
    Result := num;
end;

Namenloser 30. Jan 2014 23:32

AW: Random: Delphi vs. Lazarus?
 
Ist ja abenteuerlich...


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 Uhr.
Seite 1 von 4  1 23     Letzte »    

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