SUBROUTINE mpsqrt(w,u,v,n,m) INTEGER m,n,NMAX,MF CHARACTER*1 w(*),u(*),v(*) REAL BI PARAMETER (NMAX=2048,MF=3,BI=1./256.) CU USES mplsh,mpmov,mpmul,mpneg,mpsdv INTEGER i,ir,j,mm REAL fu,fv CHARACTER*1 r(NMAX),s(NMAX) if(2*n+1.gt.NMAX)pause 'NMAX too small in mpsqrt' mm=min(m,MF) fv=ichar(v(mm)) do 11 j=mm-1,1,-1 fv=BI*fv+ichar(v(j)) 11 continue fu=1./sqrt(fv) do 12 j=1,n i=int(fu) u(j)=char(i) fu=256.*(fu-i) 12 continue 1 continue call mpmul(r,u,u,n,n) call mplsh(r,n) call mpmul(s,r,v,n,m) call mplsh(s,n) call mpneg(s,n) s(1)=char(ichar(s(1))-253) call mpsdv(s,s,n,2,ir) do 13 j=2,n-1 if(ichar(s(j)).ne.0)goto 2 13 continue call mpmul(r,u,v,n,m) call mpmov(w,r(2),n) return 2 continue call mpmul(r,s,u,n,n) call mpmov(u,r(2),n) goto 1 END C (C) Copr. 1986-92 Numerical Recipes Software .