1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
Const im1=2147483563;
im2=2147483399;
am=(1.0 /iM1);
imm1=im1-1;
ia1=40014;
ia2=40692;
iq1=53668;
iq2=52774;
ir1=12211;
ir2=3791;
ntab=31; {En fait, c'est 32, mais pour le coup du Array...}
ndiv=(1+imm1 div ntab);
eps=1.2e-7;
rnmx=1-eps;
Var idum2,iy,idumg:longint;
iv:array[0..ntab]of longint;
Function ztu(Var idum:longint):real;
Var j:integer;
k:longint;
temp:real;
Begin
If idum<=0 then
Begin
If -idum<1 then idum:=1 Else idum:=-idum;
idum2:=idum;
For j:=ntab+7 downto 0 do
Begin
k:=idum div iq1;
idum:=ia1*(idum-k*iq1)-k*ir1;
If idum2<0 then idum:=idum+im1;
If j<ntab then iv[j]:=idum;
End;
iy:=iv[0];
End;
k:=idum div iq1;
idum:=ia1*(idum-k*iq1)-k*ir1;
If idum<0 then idum:=idum+im1;
k:=idum2 div iq2;
idum2:=ia2*(idum2-k*iq2)-k*ir2;
If idum2<0 then idum2:=idum2+im2;
j:=iy div ndiv;
iy:=iv[j]-idum2;
iv[j]:=idum;
If iy<1 then iy:=iy+imm1;
temp:=am*iy;
If temp > rnmx then ztu:=rnmx
Else ztu:=temp;
End;
Function haz(m:real):real;
Var t:real;
Begin
t:=ztu(idumg);
haz:=t*m;
End; |
Partager