RosettaCodeData/Task/Linear-congruential-generator/Stata/linear-congruential-generat...

26 lines
403 B
Plaintext

mata
function rand_bsd(u) {
m = 65536
u1 = floor(u/m)
u2 = mod(u,m)
a1 = 16838
a2 = 20077
b = 12345
u = mod((a1*u2+a2*u1)*m+a2*u2+b,2147483648)
return(u)
}
function rand_ms(u) {
u = mod(214013*u+2531011,2147483648)
return(floor(u/65536))
}
function rand_seq(f,seed,n) {
a = J(n,1,.)
for (i=1; i<=n; i++) a[i] = (*f)(seed)
return(a)
}
rand_seq(&rand_bsd(),1,10)
rand_seq(&rand_ms(),0,10)