Programowanie w języku Delphi

RandG

  • 2012-03-10 12:19
  • 2 komentarze
  • 1219 odsłon
  • Oceń ten tekst jako pierwszy
RandG
Moduł: Math

Function RandG (Mean, StdDev: Extended): Extended;

RandG reprezentuje generator liczb pseudolosowych o rozkładzie Gaussa wokół średniej Mean. Parametr StdDev jest odchyleniem standardowym generowanych liczb od wartości średniej (Mean).

Funkcja RandG wymaga modułu Math

Przykład użycia:
program Foo;
 
{$APPTYPE CONSOLE}
 
uses
  Math;
 
var
  I: Integer;
 
begin
  for I := 0 to 10 do
    WriteLn(Round(RandG(1000, 50))); // Round, ponieważ wynikiem funkcji są liczby zmiennoprzecinkowe (Extended)
end.

Może nam dać:
1020
940
976
905
958
985
1035
1056
1024
1055
953

11 liczb, ponieważ pętla for liczona jest od zera (rzecz jasna - nie musi)

Porównanie szybkości funkcji Random z RandG:
RandomRandG
60 milisekund2,5 sekundy

(Intel Core 2 Duo, 1.86 GHz)
Jak widać - funkcja Random jest szybsza, lecz generuje ona częściej powtarzające się liczby, niżeli RandG.
Ja osobiście zalecam używanie Random, RandG tylko, jeżeli potrzebujemy kilka, najwyżej kilkaset losowych liczb.

Zobacz też:

2 komentarze

Patryk27 2011-10-19 05:13

@rincewind: po prostu nie znam się na tym, a brakowało tego artykułu. Jeżeli chcesz, to przecież możesz go poprawić ;)

rincewind 2011-10-19 00:49

Ostatni akapit jest nieprawdziwy, i pokazuje brak zrozumienia tematu. Random generuje liczby z rozkładem równomiernym, RandG z normalnym. Rozkłady są czymś zupełnie innym. Nie można preferować któregokolwiek z tych generatorów z powodu wydajności, bo dają one zupełnie różne wyniki.

Ponadto: "funkcja Random jest szybsza, lecz generuje ona częściej powtarzające się liczby, niżeli RandG" -- co oznacza "częściej powtarzające się liczby"? Czyżby chodziło o okres generatora? Nie zdziwiłbym się, gdyby RandG korzystał z Random, więc argument z dupy.