procedure vsqr(var t: scalar; var v1,v2: vector); var i,j,k: integer; s,s1,s2,s3,sf,ss: scalar; u1: vector; begin { vsqr } write('(vsqr'); flush(output); for i:=1 to vdim-1 do begin { p*p -> p } k:=(i-1) div 2; szero(ss); for j:=0 to k do begin sprod(v1[j],v1[i-j],s1); ssum(s1,ss,s2); ss:=s2; end; ismult(2,s2); if odd(i) then v2[i]:=s2 else begin sprod(v1[k+1],v1[k+1],s1); ssum(s1,s2,v2[i]); end; end; sprod(v1[0],v1[0],v2[0]); for i:=0 to vdim-1 do sabs0(v1[i],u1[i]); szero(u1[vdim]); s:=t; isdiv(2,s); szero(s3); sf.u:=sone.u; sf.l.si:=0; for i:=vdim to 2*(vdim-1) do begin { p*p -> h } k:=(i-1) div 2; szero(ss); for j:=i-vdim to k do begin sprod(u1[j],u1[i-j],s1); ssum(s1,ss,s2); ss:=s2; end; ismult(2,s2); if odd(i) then ss:=s2 else begin sprod(u1[k+1],u1[k+1],s1); ssum(s1,s2,ss); end; sprod(ss,sf,s1); sunion(s3,s1,s2); s3:=s2; ismult(i,sf); sprod(sf,s,s1); sf:=s1; end; vnorm(u1,t,s1); { p*h+h*p -> h } ispower(vdim,stwo,s2); sprod(s2,v1[vdim],sf); sprod(s1,sf,s2); ismult(2,s2); ssum(s3,s2,s1); s3:=s; ismult(4,s3); ispower(vdim,s3,s2); isfactorial(vdim,sf); sprod(s2,sf,s3); sprod(v1[vdim],v1[vdim],s2); sprod(s3,s2,sf); { h*h -> h } sunion(sf,s1,s2); sabs0(s2,v2[vdim]); write(')'); flush(output); end { vsqr };