Sign in Join
Wiki copytemporary

Generating Random Numbers/pl: what changed

Revision 3 to 4. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
1-[![fpc source logo.png](/wiki-images/e/e1/fpc_source_logo.png)](</File:fpc_source_logo.png>)
2-
3-**Liczby losowe** są ważnymi zasobami do zastosowań naukowych, edukacji, tworzenia gier i wizualizacji. Odgrywają kluczową rolę w symulacji numerycznej.
4-
5-Liczby losowe generowane przez algorytm to liczby pseudolosowe. Należą do (dużego) zbioru powtarzających się liczb, których kolejność jest niemożliwa lub przynajmniej trudna do przewidzenia. W przeciwieństwie do Delphi, który używa liniowego generatora kongruencjalnego (patrz [[Delphi compatible LCG Random|LCG Random kompatybilny z Delphi]]), Free Pascal używa algorytmu MersenneTwister dla swojej standardowej funkcji losowej `[random](<http://lazarus-ccr.sourceforge.net/docs/rtl/system/random.html> "doc:rtl/system/random.html")` zdefiniowanej w RTL. Przed pierwszym użyciem generator liczb losowych FPC musi zostać zainicjowany pojedynczym wywołaniem funkcji `[randomize](<http://lazarus-ccr.sourceforge.net/docs/rtl/system/randomize.html> "doc:rtl/system/randomize.html")`, która ustawia ziarno generatora. Najlepiej jest to zrobić w fazie uruchamiania programu.
1+![](/wiki-images/8/84/Fpc_source_logo.png)
62
7-Alternatywnie w systemach opartych na systemach Unix i Linux dostępne są urządzenia wirtualne `[[Dev random|/dev/random]]` i `/dev/urandom`. Generują liczby (pseudo) losowe na podstawie sprzętu.
3+**Liczby losowe** są ważnymi zasobami do zastosowań naukowych, edukacji, tworzenia gier i wizualizacji. Odgrywają kluczową rolę w symulacji numerycznej.
84
9-Trzecią możliwością jest użycie liczb losowych ze źródeł zewnętrznych, albo ze specjalistycznych urządzeń sprzętowych, albo ze źródeł publicznych, np. na podstawie danych dotyczących rozpadu promieniotwórczego.
5+Liczby losowe generowane przez algorytm to liczby pseudolosowe. Należą do (dużego) zbioru powtarzających się liczb, których kolejność jest niemożliwa lub przynajmniej trudna do przewidzenia. W przeciwieństwie do Delphi, który używa liniowego generatora kongruencjalnego (patrz [[Delphi compatible LCG Random|LCG Random kompatybilny z Delphi]]), Free Pascal używa algorytmu MersenneTwister dla swojej standardowej funkcji losowej [[doc:rtl/system/random.html|random]] zdefiniowanej w RTL. Przed pierwszym użyciem generator liczb losowych FPC musi zostać zainicjowany pojedynczym wywołaniem funkcji [[doc:rtl/system/randomize.html|randomize]], która ustawia ziarno generatora. Najlepiej jest to zrobić w fazie uruchamiania programu.
106
11-## Contents
7+Alternatywnie w systemach opartych na systemach Unix i Linux dostępne są urządzenia wirtualne [[Dev random|/dev/random]] i `/dev/urandom`. Generują liczby (pseudo) losowe na podstawie sprzętu.
128
13- * 1 Jednorodny rozkład
14- * 2 Normal (Gaussian) Distribution
15- * 3 Exponential Distribution
16- * 4 Gamma Distribution
17- * 5 Erlang Distribution
18- * 6 Poisson Distribution
19- * 7 t Distribution
20- * 8 Chi Squared Distribution
21- * 9 F Distribution
22- * 10 See also
23- * 11 References
9+Trzecią możliwością jest użycie liczb losowych ze źródeł zewnętrznych, albo ze specjalistycznych urządzeń sprzętowych, albo ze źródeł publicznych, np. na podstawie danych dotyczących rozpadu promieniotwórczego.
2410
2511## Jednorodny rozkład
2612
27-Ciągły rozkład jednorodny (nazywany również rozkładem prostokątnym) reprezentuje rodzinę symetrycznych rozkładów prawdopodobieństwa. Tutaj dla każdego członka rodziny wszystkie przedziały tej samej długości na nośniku rozkładu są jednakowo prawdopodobne.
13+Ciągły rozkład jednorodny (nazywany również rozkładem prostokątnym) reprezentuje rodzinę symetrycznych rozkładów prawdopodobieństwa. Tutaj dla każdego członka rodziny wszystkie przedziały tej samej długości na nośniku rozkładu są jednakowo prawdopodobne.
2814
29-Standardowa funkcja [[RTL]] `[random](<http://lazarus-ccr.sourceforge.net/docs/rtl/system/random.html> "doc:rtl/system/random.html")` generuje liczby losowe, które mają jednolity rozkład. Jeśli zostanie wywoływana bez parametru zwróci pseudolosową liczbę zmiennoprzecinkową w przedziale [[Marsaglia's pseudo random number generators|0, 1), tj. 0 <= wynik < 1\. Jeśli random jest wywoływana z argumentem longint L, dostarcza losową liczbę zmiennoprzecinkową w przedziale [0, L).
15+Standardowa funkcja [[RTL]] [[doc:rtl/system/random.html|random]] generuje liczby losowe, które mają jednolity rozkład. Jeśli zostanie wywoływana bez parametru zwróci pseudolosową liczbę zmiennoprzecinkową w przedziale \[0, 1), tj. 0 \<= wynik \< 1. Jeśli random jest wywoływana z argumentem longint L, dostarcza losową liczbę zmiennoprzecinkową w przedziale \[0, L).
3016
31-Kolejny zestaw generatorów liczb losowych o równomiernym rozkładzie jest przedstawiony w `[generatorach liczb pseudolosowych Marsaglii]]`.
17+Kolejny zestaw generatorów liczb losowych o równomiernym rozkładzie jest przedstawiony w [[Marsaglia&|generatorach liczb pseudolosowych Marsaglii]].
3218
33-Jednolicie rozmieszczone liczby losowe nie są przydatne w żadnej aplikacji. Do tworzenia liczb losowych z innych rozkładów potrzebne są specjalne algorytmy:
19+Jednolicie rozmieszczone liczby losowe nie są przydatne w żadnej aplikacji. Do tworzenia liczb losowych z innych rozkładów potrzebne są specjalne algorytmy:
3420
3521## Normal (Gaussian) Distribution
3622
37-One of the more common algorithms to produce normally distributed random numbers from uniformly distributed random numbers is the [Box-Müller approach](<http://en.wikipedia.org/wiki/Box–Muller_transform>). The following function calculates Gaussian-distributed random numbers:
38-```
39-function rnorm (mean, sd: real): real;
40- {Calculates Gaussian random numbers according to the Box-Müller approach}
41- var
42- u1, u2: real;
43- begin
44- u1 := random;
45- u2 := random;
46- rnorm := mean * abs(1 + sqrt(-2 * (ln(u1))) * cos(2 * pi * u2) * sd);
47- end;
48-```
23+One of the more common algorithms to produce normally distributed random numbers from uniformly distributed random numbers is the [Box-Müller approach](http://en.wikipedia.org/wiki/Box–Muller_transform). The following function calculates Gaussian-distributed random numbers:
4924
50-The same algorithm is used by the [randg](<http://lazarus-ccr.sourceforge.net/docs/rtl/math/randg.html> "doc:rtl/math/randg.html") randg function from the [[RTL]] [math](<http://lazarus-ccr.sourceforge.net/docs/rtl/math/index.html> "doc:rtl/math/index.html") unit:
25+``` pascal
26+ function rnorm (mean, sd: real): real;
27+ {Calculates Gaussian random numbers according to the Box-Müller approach}
28+ var
29+ u1, u2: real;
30+ begin
31+ u1 := random;
32+ u2 := random;
33+ rnorm := mean * abs(1 + sqrt(-2 * (ln(u1))) * cos(2 * pi * u2) * sd);
34+ end;
5135```
36+
37+The same algorithm is used by the [[doc:rtl/math/randg.html|randg]] randg function from the [[RTL]] [[doc:rtl/math/index.html|math]] unit:
38+
39+``` pascal
5240function randg(mean,stddev: float): float;
5341```
5442
5543## Exponential Distribution
5644
57-An exponential distribution occurs frequently in real-world problems. A classical example is the distribution of waiting times between independent Poisson-random events, e.g. the radioactive decay of nuclei [Press et al. 1989].
45+An exponential distribution occurs frequently in real-world problems. A classical example is the distribution of waiting times between independent Poisson-random events, e.g. the radioactive decay of nuclei \[Press et al. 1989\].
5846
59-The following function delivers a single real random number out of an exponential distribution. _Rate_ is the inverse of the mean, and the constant _RESOLUTION_ determines the granularity of generated random numbers.
60-```
47+The following function delivers a single real random number out of an exponential distribution. *Rate* is the inverse of the mean, and the constant *RESOLUTION* determines the granularity of generated random numbers.
48+
49+``` pascal
6150function randomExp(a, rate: real): real;
62- const
63- RESOLUTION = 1000;
64- var
65- unif: real;
66- begin
67- if rate = 0 then
68- randomExp := NaN
69- else
70- begin
71- repeat
72- unif := random(RESOLUTION) / RESOLUTION;
73- until unif <> 0;
74- randomExp := a - rate * ln(unif);
75- end;
76- end;
51+const
52+ RESOLUTION = 1000;
53+var
54+ unif: real;
55+begin
56+ if rate = 0 then
57+ randomExp := NaN
58+ else
59+ begin
60+ repeat
61+ unif := random(RESOLUTION) / RESOLUTION;
62+ until unif <> 0;
63+ randomExp := a - rate * ln(unif);
64+ end;
65+end;
7766```
7867
7968## Gamma Distribution
8069
81-The gamma distribution is a two-parameter family of continuous random distributions. It is a generalization of both the exponential distribution and the Erlang distribution. Possible applications of the gamma distribution include modelling and simulation of waiting lines, or queues, and actuarial science.
70+The gamma distribution is a two-parameter family of continuous random distributions. It is a generalization of both the exponential distribution and the Erlang distribution. Possible applications of the gamma distribution include modelling and simulation of waiting lines, or queues, and actuarial science.
8271
83-The following function delivers a single real random number out of a gamma distribution. The shape of the distribution is defined by the parameters _a_ , _b_ and _c_. The function makes use of the function **randomExp** as defined above.
84-```
72+The following function delivers a single real random number out of a gamma distribution. The shape of the distribution is defined by the parameters *a*, *b* and *c*. The function makes use of the function **randomExp** as defined above.
73+
74+``` pascal
8575function randomGamma(a, b, c: real): real;
86- const
87- RESOLUTION = 1000;
88- T = 4.5;
89- D = 1 + ln(T);
90- var
91- unif: real;
92- A2, B2, C2, Q, p, y: real;
93- p1, p2, v, w, z: real;
94- found: boolean;
95- begin
96- A2 := 1 / sqrt(2 * c - 1);
97- B2 := c - ln(4);
98- Q := c + 1 / A2;
99- C2 := 1 + c / exp(1);
100- found := False;
101- if c < 1 then
76+const
77+ RESOLUTION = 1000;
78+ T = 4.5;
79+ D = 1 + ln(T);
80+var
81+ unif: real;
82+ A2, B2, C2, Q, p, y: real;
83+ p1, p2, v, w, z: real;
84+ found: boolean;
85+begin
86+ A2 := 1 / sqrt(2 * c - 1);
87+ B2 := c - ln(4);
88+ Q := c + 1 / A2;
89+ C2 := 1 + c / exp(1);
90+ found := False;
91+ if c < 1 then
92+ begin
93+ repeat
94+ repeat
95+ unif := random(RESOLUTION) / RESOLUTION;
96+ until unif > 0;
97+ p := C2 * unif;
98+ if p > 1 then
10299 begin
103100 repeat
104- repeat
105- unif := random(RESOLUTION) / RESOLUTION;
106- until unif > 0;
107- p := C2 * unif;
108- if p > 1 then
109- begin
110- repeat
111- unif := random(RESOLUTION) / RESOLUTION;
112- until unif > 0;
113- y := -ln((C2 - p) / c);
114- if unif <= power(y, c - 1) then
115- begin
116- randomGamma := a + b * y;
117- found := True;
118- end;
119- end
120- else
121- begin
122- y := power(p, 1 / c);
123- if unif <= exp(-y) then
124- begin
125- randomGamma := a + b * y;
126- found := True;
127- end;
128- end;
129- until found;
130- end
131- else if c = 1 then
132- { Gamma distribution becomes exponential distribution, if c = 1 }
133- begin
134- randomGamma := randomExp(a, b);
101+ unif := random(RESOLUTION) / RESOLUTION;
102+ until unif > 0;
103+ y := -ln((C2 - p) / c);
104+ if unif <= power(y, c - 1) then
105+ begin
106+ randomGamma := a + b * y;
107+ found := True;
108+ end;
135109 end
136110 else
137111 begin
138- repeat
139- repeat
140- p1 := random(RESOLUTION) / RESOLUTION;
141- until p1 > 0;
142- repeat
143- p2 := random(RESOLUTION) / RESOLUTION;
144- until p2 > 0;
145- v := A2 * ln(p1 / (1 - p1));
146- y := c * exp(v);
147- z := p1 * p1 * p2;
148- w := B2 + Q * v - y;
149- if (w + D - T * z >= 0) or (w >= ln(z)) then
150- begin
151- randomGamma := a + b * y;
152- found := True;
153- end;
154- until found;
112+ y := power(p, 1 / c);
113+ if unif <= exp(-y) then
114+ begin
115+ randomGamma := a + b * y;
116+ found := True;
117+ end;
155118 end;
156- end;
119+ until found;
120+ end
121+ else if c = 1 then
122+ { Gamma distribution becomes exponential distribution, if c = 1 }
123+ begin
124+ randomGamma := randomExp(a, b);
125+ end
126+ else
127+ begin
128+ repeat
129+ repeat
130+ p1 := random(RESOLUTION) / RESOLUTION;
131+ until p1 > 0;
132+ repeat
133+ p2 := random(RESOLUTION) / RESOLUTION;
134+ until p2 > 0;
135+ v := A2 * ln(p1 / (1 - p1));
136+ y := c * exp(v);
137+ z := p1 * p1 * p2;
138+ w := B2 + Q * v - y;
139+ if (w + D - T * z >= 0) or (w >= ln(z)) then
140+ begin
141+ randomGamma := a + b * y;
142+ found := True;
143+ end;
144+ until found;
145+ end;
146+end;
157147```
158148
159149## Erlang Distribution
160150
161-The Erlang distribution is a two parameter family of continuous probability distributions. It is a generalization of the exponential distribution and a special case of the gamma distribution, where _c_ is an integer. The Erlang distribution has been first described by Agner Krarup Erlang in order to model the time interval between telephone calls. It is used for queuing theory and for simulating waiting lines.
162-```
163-function randomErlang(mean: real; k: integer): real;
164- const
165- RESOLUTION = 1000;
166- var
167- i: integer;
168- unif, prod: real;
151+The Erlang distribution is a two parameter family of continuous probability distributions. It is a generalization of the exponential distribution and a special case of the gamma distribution, where *c* is an integer. The Erlang distribution has been first described by Agner Krarup Erlang in order to model the time interval between telephone calls. It is used for queuing theory and for simulating waiting lines.
152+
153+``` pascal
154+ function randomErlang(mean: real; k: integer): real;
155+ const
156+ RESOLUTION = 1000;
157+ var
158+ i: integer;
159+ unif, prod: real;
160+ begin
161+ if (mean <= 0) or (k < 1) then
162+ randomErlang := NaN
163+ else
164+ begin
165+ prod := 1;
166+ for i := 1 to k do
169167 begin
170- if (mean <= 0) or (k < 1) then
171- randomErlang := NaN
172- else
173- begin
174- prod := 1;
175- for i := 1 to k do
176- begin
177- repeat
178- unif := random(RESOLUTION) / RESOLUTION;
179- until unif <> 0;
180- prod := prod * unif;
181- end;
182- randomErlang := -mean * ln(prod);
183- end;
168+ repeat
169+ unif := random(RESOLUTION) / RESOLUTION;
170+ until unif <> 0;
171+ prod := prod * unif;
184172 end;
173+ randomErlang := -mean * ln(prod);
174+ end;
175+ end;
185176```
186177
187178## Poisson Distribution
188179
189-The Poisson distribution applies to integer values. It represents the probability of _k_ successes, when the probability of a success in each trial is small and the rate of occurrence (the mean value) is constant.
190-```
180+The Poisson distribution applies to integer values. It represents the probability of *k* successes, when the probability of a success in each trial is small and the rate of occurrence (the mean value) is constant.
181+
182+``` pascal
191183function randomPoisson(mean: integer): integer;
192- { Generator for Poisson distribution (Donald Knuth's algorithm) }
193- const
194- RESOLUTION = 1000;
195- var
196- k: integer;
197- b, l: real;
198- begin
199- assert(mean > 0, 'mean < 1');
200- k := 0;
201- b := 1;
202- l := exp(-mean);
203- while b > l do
204- begin
205- k := k + 1;
206- b := b * random(RESOLUTION) / RESOLUTION;
207- end;
208- randomPoisson := k - 1;
209- end;
184+{ Generator for Poisson distribution (Donald Knuth's algorithm) }
185+const
186+ RESOLUTION = 1000;
187+var
188+ k: integer;
189+ b, l: real;
190+begin
191+ assert(mean > 0, 'mean < 1');
192+ k := 0;
193+ b := 1;
194+ l := exp(-mean);
195+ while b > l do
196+ begin
197+ k := k + 1;
198+ b := b * random(RESOLUTION) / RESOLUTION;
199+ end;
200+ randomPoisson := k - 1;
201+end;
210202```
211203
212204## t Distribution
213205
214-The t distribution (also referred to a Student's t distribution, since it was published by William Sealy Gosset in 1908 under the pseudonym _Student_) is a continuous probability distribution. Its shape is defined by one parameter, the degrees of freedom (_df_). In statistics, many estimators are t distributed. Therefore, Student's t-distribution plays a major role in a number of widely used statistical analyses, including Student's t-test for assessing the statistical significance of the difference between two sample means, the construction of confidence intervals for the difference between two population means, and in linear regression analysis. The t-distribution also arises in Bayesian analysis of data from a normal family.
206+The t distribution (also referred to a Student's t distribution, since it was published by William Sealy Gosset in 1908 under the pseudonym *Student*) is a continuous probability distribution. Its shape is defined by one parameter, the degrees of freedom (*df*). In statistics, many estimators are t distributed. Therefore, Student's t-distribution plays a major role in a number of widely used statistical analyses, including Student's t-test for assessing the statistical significance of the difference between two sample means, the construction of confidence intervals for the difference between two population means, and in linear regression analysis. The t-distribution also arises in Bayesian analysis of data from a normal family.
215207
216-The following algorithm depends on the [[RTL]] function `[random](<http://lazarus-ccr.sourceforge.net/docs/rtl/system/random.html> "doc:rtl/system/random.html")` and on the **randomChisq** function
217-```
208+The following algorithm depends on the [[RTL]] function [[doc:rtl/system/random.html|random]] and on the **randomChisq** function
209+
210+``` pascal
218211function randomT(df: integer): real;
219- { Generator for Student's t distribution }
220- begin
221- if df < 1 then
222- randomT := NaN
223- else begin
224- randomT := randg(0, 1) / sqrt(randomChisq(df) / df);
225- end;
226- end;
212+{ Generator for Student's t distribution }
213+begin
214+ if df < 1 then
215+ randomT := NaN
216+ else begin
217+ randomT := randg(0, 1) / sqrt(randomChisq(df) / df);
218+ end;
219+end;
227220```
228221
229222## Chi Squared Distribution
230223
231-The chi squared distribution is a continuous distribution of random numbers with _df_ degrees of freedom. It is the distribution of a sum of the squares of _df_ independent standard normal random variables. The chi squared distribution has numerous applications in inferential statistics, e.g. in estimating variances and for chi-squared tests. It is a special gamma distribution with _c_ = _df_ / 2 and _b_ = 2. Therefore the following function depends on the function **randomGamma**.
232-```
224+The chi squared distribution is a continuous distribution of random numbers with *df* degrees of freedom. It is the distribution of a sum of the squares of *df* independent standard normal random variables. The chi squared distribution has numerous applications in inferential statistics, e.g. in estimating variances and for chi-squared tests. It is a special gamma distribution with *c* = *df*/ 2 and *b* = 2. Therefore the following function depends on the function **randomGamma**.
225+
226+``` pascal
233227function randomChisq(df: integer): real;
234- begin
235- if df < 1 then
236- randomChisq := NaN
237- else
238- randomChisq := randomGamma(0, 2, 0.5 * df);
239- end;
228+begin
229+ if df < 1 then
230+ randomChisq := NaN
231+ else
232+ randomChisq := randomGamma(0, 2, 0.5 * df);
233+end;
240234```
241235
242236## F Distribution
243237
244-The F distribution, also referred to as Fisher-Snedecor distribution, is a continuous probability distribution. It is used for F Test and ANOVA. It has two degrees of freedom that serve as shape parameters _v_ and _w_ and that are positive integers. The following function **randomF** makes use of **randomChisq**.
245-```
238+The F distribution, also referred to as Fisher-Snedecor distribution, is a continuous probability distribution. It is used for F Test and ANOVA. It has two degrees of freedom that serve as shape parameters *v* and *w* and that are positive integers. The following function **randomF** makes use of **randomChisq**.
239+
240+``` pascal
246241function randomF(v, w: integer): real;
247- begin
248- if (v < 1) or (w < 1) then
249- randomF := NaN
250- else
251- randomF := randomChisq(v) / v / (randomChisq(w) / w);
252- end;
242+begin
243+ if (v < 1) or (w < 1) then
244+ randomF := NaN
245+ else
246+ randomF := randomChisq(v) / v / (randomChisq(w) / w);
247+end;
253248```
254249
255250## See also
256251
257- * [[Dev random]]
258- * [[Functions for descriptive statistics]]
259- * [[Marsaglia's pseudo random number generators]]
260- * [[A simple implementation of the Mersenne twister]]
261- * [[Delphi compatible LCG Random]]
262- * [[EverettRandom]]
252+- [[Dev random]]
253+- [[Functions for descriptive statistics]]
254+- [[Marsaglia&|Marsaglia's pseudo random number generators]]
255+- [[A simple implementation of the Mersenne twister]]
256+- [[Delphi compatible LCG Random]]
257+- [[EverettRandom]]
263258
264259## References
265260
266- 1. [G. E. P. Box and Mervin E. Muller, _A Note on the Generation of Random Normal Deviates_ , The Annals of Mathematical Statistics (1958), Vol. 29, No. 2 pp. 610–611](<http://projecteuclid.org/DPubS/Repository/1.0/Disseminate?view=body&id=pdf_1&handle=euclid.aoms/1177706645>)
267- 2. Dietrich, J. W. (2002). [Der Hypophysen-Schilddrüsen-Regelkreis](<http://openlibrary.org/books/OL24586469M/Der_Hypophysen-Schilddrüsen-Regelkreis>). Berlin, Germany: Logos-Verlag Berlin. ISBN 978-3-89722-850-4. OCLC 50451543.
268- 3. Press, W. H., B. P. Flannery, S. A. Teukolsky, W. T. Vetterling (1989). [Numerical Recipes in Pascal](<http://openlibrary.org/works/OL16807779W/>). The Art of Scientific Computing, Cambridge University Press, ISBN 0-521-37516-9.
269- 4. Richard Saucier, [Computer Generation of Statistical Distributions](<http://ftp.arl.mil/random/random.pdf>), ARL-TR-2168, US Army Research Laboratory, Aberdeen Proving Ground, MD, 21005-5068, March 2000.
270- 5. R.U. Seydel, Generating Random Numbers with Specified Distributions. In: Tools for Computational Finance, Universitext, [DOI 10.1007/978-1-4471-2993-6_2](<http://dx.doi.org/10.1007/978-1-4471-2993-6_2>), © Springer-Verlag London Limited 2012
271- 6. Christian Walck, Hand-book on STATISTICAL DISTRIBUTIONS for experimentalists, Internal Report SUF–PFY/96–01, University of Stockholm 2007
261+1. [G. E. P. Box and Mervin E. Muller, *A Note on the Generation of Random Normal Deviates*, The Annals of Mathematical Statistics (1958), Vol. 29, No. 2 pp. 610–611](http://projecteuclid.org/DPubS/Repository/1.0/Disseminate?view=body&id=pdf_1&handle=euclid.aoms/1177706645)
262+2. Dietrich, J. W. (2002). [Der Hypophysen-Schilddrüsen-Regelkreis](http://openlibrary.org/books/OL24586469M/Der_Hypophysen-Schilddrüsen-Regelkreis). Berlin, Germany: Logos-Verlag Berlin. ISBN 978-3-89722-850-4. OCLC 50451543.
263+3. Press, W. H., B. P. Flannery, S. A. Teukolsky, W. T. Vetterling (1989). [Numerical Recipes in Pascal](http://openlibrary.org/works/OL16807779W/). The Art of Scientific Computing, Cambridge University Press, ISBN 0-521-37516-9.
264+4. Richard Saucier, [Computer Generation of Statistical Distributions](http://ftp.arl.mil/random/random.pdf), ARL-TR-2168, US Army Research Laboratory, Aberdeen Proving Ground, MD, 21005-5068, March 2000.
265+5. R.U. Seydel, Generating Random Numbers with Specified Distributions. In: Tools for Computational Finance, Universitext, [DOI 10.1007/978-1-4471-2993-6_2](http://dx.doi.org/10.1007/978-1-4471-2993-6_2), © Springer-Verlag London Limited 2012
266+6. Christian Walck, Hand-book on STATISTICAL DISTRIBUTIONS for experimentalists, Internal Report SUF–PFY/96–01, University of Stockholm 2007
272267
273268---
274-*From the Free Pascal wiki, page "Generating Random Numbers/pl", as the Internet Archive kept it on 2022-08-09. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
269+*From the Free Pascal wiki, page "Generating Random Numbers/pl", as it stood on 2020-11-08 after a change by Slawek, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history