struct Multinormaldev : Ran { Int mm; VecDoub mean; MatDoub var; Cholesky chol; VecDoub spt, pt; Multinormaldev(Ullong j, VecDoub &mmean, MatDoub &vvar) : Ran(j), mm(mmean.size()), mean(mmean), var(vvar), chol(var), spt(mm), pt(mm) { if (var.ncols() != mm || var.nrows() != mm) throw("bad sizes"); } VecDoub &dev() { Int i; Doub u,v,x,y,q; for (i=0;i 0.27597 && (q > 0.27846 || SQR(v) > -4.*log(u)*SQR(u))); spt[i] = v/u; } chol.elmult(spt,pt); for (i=0;i