drand48

Autres langues

Langue: pl

Autres versions - même langue

Version: 1993-07-02 (openSuse - 09/10/07)

Section: 3 (Bibliothèques de fonctions)

NAZWA

drand48, erand48, lrand48, nrand48, mrand48, jrand48, srand48, seed48, lcong48 - generowanie jednolicie roz³o¿onych liczb pseudolosowych

SK£ADNIA


#include <stdlib.h>



double drand48(void);



double erand48(unsigned short xsubi[3]);



long int lrand48(void);



long int nrand48(unsigned short xsubi[3]);



long int mrand48(void);



long int jrand48(unsigned short xsubi[3]);



void srand48(long int seedval);



unsigned short *seed48(unsigned short seed16v[3]);



void lcong48(unsigned short param[7]);

OPIS

Funkcje te generuj± liczby pseudolosowe korzystaj±c z liniowego algorytmu kongruencyjnego i 48-bitowej arytmetyki liczb ca³kowitych.

Funkcje drand48() i erand48() zwracaj± nieujemne zmiennoprzecinkowe warto¶ci podwójnej precyzji równomiernie roz³o¿one w przedziale [0.0, 1.0].

Funkcje lrand48() i nrand48() zwracaj± nieujemne warto¶ci long integer równomiernie roz³o¿one w przedziale pomiêdzy 0 a 2^31.

Funkcje mrand48() i jrand48() zwracaj± warto¶ci long integer ze znakiem równomiernie roz³o¿one w przedziale pomiêdzy -2^31 a 2^31.

Funkcje srand48(), seed48() i lcong48() to funkcje inicjuj±ce. Jedna z nich powinna zostaæ wywo³ana przed u¿yciem funkcji drand48(), lrand48() czy mrand48(). Funkcje erand48(), nrand48() i jrand48() nie wymagaj± wcze¶niejszego wywo³ania funkcji inicjuj±cej.

Wszystkie te funkcje generuj± ci±g 48-bitowych liczb ca³kowitych Xi, wed³ug liniowego wzoru kongruencyjnego:


Xn+1 = (aXn + c) mod m, gdzie n >= 0


Parametr m = 2^48, jako ¿e korzystamy z 48-bitowej arytmetyki. Je¶li nie wywo³ano lcong48(), a i c s± zadane jako:


a = 0x5DEECE66D c = 0xB


Warto¶æ zwracana przez ka¿d± z funkcji drand48(), erand48(), lrand48(), nrand48(), mrand48() czy jrand48() jest obliczana poprzez wygenerowanie nastêpnego 48-bitowego Xi z ci±gu, a nastêpnie skopiwanie odpowiedniej ilo¶ci bardziej znacz±cych bitów Xi, zale¿nej od zwracanego typu danych, i przekszta³cenie ich w zwracan± warto¶æ.

Funkcje drand48(), lrand48() i mrand48() przechowuj± ostatni± 48-bitow± warto¶æ Xi w wewnêtrznym buforze. Funkcje erand48(), nrand48() i jrand48() wymagaj± od wywo³uj±cego je programu zapawnienia miejsca dla kolejnych warto¶ci Xi w tablicy xsubi podanej jako argument. Te funkcje s± inicjowane poprzez umieszczenie w tablicy pocz±tkowych warto¶ci Xi przed pierwszym wywo³aniem funkcji.

Funkcja inicjuj±ca srand48() wpisuje warto¶æ argumentu seedval do Xi, ustawiaj±c 32 bardziej znacz±ce bity. Mniej znacz±cym 16 bitom zawsze nadawana jest warto¶æ 0x330E.

Funkcja inicjuj±ca seed48() zmienia warto¶æ Xi na 48-bitow± warto¶æ podana w tablicy seed16v. Poprzednia warto¶æ Xi jest kopiowana do wewnêtrznego bufora, a wska¼nik do tego bufora jest zwracany przez funkcjê seed48().

Funkcja inicjuj±ca lcong48() pozwala okre¶liæ pocz±tkowe warto¶ci dla Xi, a oraz c. Elementy tablicy param[0-2] okre¶laj± Xi, param[3-5] okre¶laj± a, a param[6] okre¶la c. Po wywo³aniu lcong48() ka¿de nastêpne wywo³anie srand48() czy seed48() przywróci standardowe warto¶ci a i c.

ZGODNE Z

SVID 3

UWAGI

Te funkcje s± uznane przez SVID 3 za przestarza³e, zamiast nich powinna byæ u¿ywana funkcja rand(3).

ZOBACZ TAK¯E

rand(3), random(3)