procedure vtrans(d2: integer; var s,sd: scalar; var v1,v2: vector); var imax,i,j,jmin: integer; st,sf,s0,s1,s2,s3: scalar; vt: vector; begin { vtrans } write('(vtrans'); flush(output); ptrans(d2,sd,v1,v2); { p -> p } imax:=min(d2,(vdim+1) div 2); vt[0].u:=sone.u; vt[0].l.si:=0; for i:=1 to imax do begin { binomial coefficients } vt[i]:=vt[i-1]; ismult(vdim-i+1,vt[i]); isdiv(i,vt[i]); vt[vdim-i]:=vt[i]; end; vt[vdim]:=vt[0]; imax:=min(d2,vdim); jmin:=1; sabs0(sd,s0); squot(s0,s,st); if not sle(st,shalf) then begin s1:=st; repeat jmin:=2*jmin; isdiv(2,s1); until sle(s1,shalf) or (jmin>999); sdiff(sone,s1,s2); ispower(jmin,s2,s3); { 1/s3 is an upper bound on exp(st) } end; ispower(vdim-imax,s0,s2); sprod(s2,v1[vdim],sf); for i:=imax downto 0 do begin j:=vdim+1-i; if j