Thema: Delphi Random(2) in schnell

Einzelnen Beitrag anzeigen

Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#38

Re: Random(2) in schnell

  Alt 2. Apr 2007, 08:56
Also das mit 32Bit vs 64Bit habe ich auch schon ausprobiert.

Statt einem array of Int64 ein array of Integer zu nehmen bringt, es hat mich sehr erstaunt, keinen messbaren Performanceschub.
Ich habe es mehrmals gemessen, die Differenz war <2 Sekunden auf 5 Minuten.

Das mit dem SetLength ist eigentlich keine Schlechte Idee, auch wenn es hier an der falschen Stelle steht
das ganze muss eine Zeile höher.
Allerdings bringt auch dies keinen signifikanten Unterschied.

Len:=C+1; 43s für 10mio
Len:=C+100; 43s für 10mio
Len:=C+10000; 42s für 10mio


Übrigens ist mir eine Sache aufgefallen...
während folgende Abfrage:
if Random(2)=1 then Eine ziemlich glatte Kurze hervorbringt, hat bei dieser Bedingung:
Delphi-Quellcode:
if Rnd>31 then begin R:=Random(MaxInt); Rnd:=1; end;
if (R and (1 shl Rnd))<>0 then
Die Kurve deutlich ausgeprägte Spitzen!
interessanterweise in 32er Abständen...
So wie das im Moment ist scheint diese Optimierung die zufällige Verteilung etwas aus dem Gleichgewicht zu bringen.

[Edit]
Jetzt versteh ich gar nix mehr.
Ist Cardinal schneller als Integer???
if Rnd>31 then begin R:=Random(High(R))+1; Rnd:=1; end; mit Integer auf 10mio: 35s
mit Cardinal auf 10mio: 27s


[Edit2]
Das Array hingegen auf Cardinal downzugraden brachte mich lediglich von 27 auf 26s.
Die sind wahrscheinlich auch eher im nur halb so kleinen Array begründet.

[Edit3]
Im Anhang mal ein ScreenShot von den "Zacken"...
btw scheinen es nicht 32er Abstände zu sein sonderen 31er.
Miniaturansicht angehängter Grafiken
keine_zacken_189.jpg   zacken_177.jpg  
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat