RandG

Patryk27
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:
Random
RandG
60 milisekund 2,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 komentarzy

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

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.