* Date: Tue 14 Oct 86 11:32:24-PDT * From: Oscar Buneman * vectorised random number generator ident random entry random *----------Fortran call: call random(array,length) *----------generates powers of o'100000003 modulo 2**48 *----------starts with the 23rd power as seed on first call seed con o'4046005227564113 c000 con o'3037347100000000 d000 con o'3753640100000000 random a7 2,a6 length address a1 0 a2 64 vl a2 s1 seed, s2 s1+s1 a7 ,a7 length value s2 s2+s1 s1 s1<24 s1 s1+s2 s6 <48 mask s1 s6&s1 *-----------scalar loop for first 64: loop v1,a1 s1 s2 s1+s1 s2 s2+s1 s1 s1<24 s1 s1+s2 s1 s6&s1 a1 a1+a0 a0 a1-a2 jam loop *--------------- s5 c000, top half of o'100000003**64 s7 <24 s7 s7<24 s3 d000, bottom half of o'100000003**64 moved up a1 0 a3 a7-1 length-1 s2 >58 s1 +a3 s1 s1&s2 a3 s1 length-1 with bottom six bits missing s4 sb s4 s4>1 exponent for floating a5 1,a6 a6 a7-a3 a6 a6-1 index of last element used v0 v1 copy j test *---------------vector loop using integer multiplication of *---------------24 top bits of mantissas and: *---------------(A*2**24+B)*(C*2**24+D)=(AD+BC)*2**24+BD mod 2**48 vloop v6 s4+v0 4AB include exponent for floating v5 s7&v6 0A0 v2 s3*fv5 0AD a4 24 v4 v1