Professional Documents
Culture Documents
Generatori
pseudoslučajnih brojeva
Generatori pseudoslučajnih brojeva
unsigned long u;
unsigned long iurng(void) {
return u = 429493445 * u + 907633385;
}
void SetSeed(unsigned long seed) double Randomd(void)
{ {
u = seed; return( iurng() / 4294967296.);
} }
S n ( S n j op S n k ) mod m, 0 j k
op je neka operacija (+ - * / xor)
Ideja:
• Generisati slučajne brojeve kao
koordinate tačaka u ravni
(u prvom kvadrantu)
• Odnos broja tačaka u kvadratu
R=1 jedinične dužine stranica
i četvrtini kružnice
jediničnog poluprečnika
daje traženu (približnu) vrednost.
Rešenje
PROGRAM RAND(output); BEGIN
CONST MAX = 10000; j := 1;
VAR i, j : longint; FOR i := 1 to 7 DO
BEGIN
FUNCTION pi(i : longint) : real; j:=j*10;
VAR x, y,d : real; writeln(output, pi(j));
u_krugu, j : longint; END
BEGIN END.
u_krugu := 0;
d := MAX; Rezultati:
FOR j := 0 TO i DO i TP 7.0 VC++ 9
BEGIN 10 4 3.6
x := random(MAX)/d;
y := random(MAX)/d; 100 3.16 3.08
if sqr(x)+sqr(y)<=1.0 THEN 1000 3.152 3.084
u_krugu := u_krugu+1; 10000 3.1552 3.1132
END;
pi := 4.0 * u_krugu / i 100000 3.14324 3.13984
END; 1000000 3.141272 3.14014