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