void miser(Doub func(VecDoub_I &), VecDoub_I ®n, const Int npts, const Doub dith, Doub &ave, Doub &var) { const Int MNPT=15, MNBS=60; const Doub PFAC=0.1, TINY=1.0e-30, BIG=1.0e30; static Int iran=0; Int j,jb,n,ndim,npre,nptl,nptr; Doub avel,varl,fracl,fval,rgl,rgm,rgr,s,sigl,siglb,sigr,sigrb; Doub sum,sumb,summ,summ2; ndim=regn.size()/2; VecDoub pt(ndim); if (npts < MNBS) { summ=summ2=0.0; for (n=0;n fminl[j] && fmaxr[j] > fminr[j]) { sigl=MAX(TINY,pow(fmaxl[j]-fminl[j],2.0/3.0)); sigr=MAX(TINY,pow(fmaxr[j]-fminr[j],2.0/3.0)); sum=sigl+sigr; if (sum<=sumb) { sumb=sum; jb=j; siglb=sigl; sigrb=sigr; } } } if (jb == -1) jb=(ndim*iran)/175000; rgl=regn[jb]; rgm=rmid[jb]; rgr=regn[ndim+jb]; fracl=abs((rgm-rgl)/(rgr-rgl)); nptl=Int(MNPT+(npts-npre-2*MNPT)*fracl*siglb /(fracl*siglb+(1.0-fracl)*sigrb)); nptr=npts-npre-nptl; VecDoub regn_temp(2*ndim); for (j=0;j