program mkcoeff(input,output); { like mkpoly, but higher precision and less coeffs } const hdim=29; edim=59; vdim=200; pdeg=4999; lmax=30; %include 'types.h'; var deg,k,zd,n: integer; v1,v2: vector; vv: vtuple; t: text; %include 'reps.i'; %include 'scalar.i'; %include 'vector.i'; procedure ptget(d: integer; var t: text; var v: vector); { make polynomial v from next d-1 zeros in file t } var i,j: integer; s: longstring; r: hreal; st0,st1,st2: scalar; begin { ptget } v[0]:=sone; for i:=1 to d do begin readln(t,s); srset(s,r); rquot(sone.u,r,st0.u); st0.l:=st0.u; for j:=i downto 1 do begin sprod(v[j-1],st0,st2); ssum(v[j],st2,st1); v[j]:=st1; end; end; for i:=d+1 to vdim do szero(v[i]); end { ptget }; begin { mkcoeff } sinit; write('mkcoeff: converting zeros to polynomials '); reset(t,'zeros.t'); readln(t,zd); n:=min(zd+1,pdeg); k:=-1; repeat k:=k+1; deg:=min(n,vdim-1); ptget(deg,t,vv[k]); write('.'); flush(output); n:=n-deg; until (n=0) or (k=lmax); writeln; write('mkcoeff: multiplying polynomials '); v1:=vv[k]; while k>0 do begin k:=k-1; pprod(vdim-1,vv[k],v1,v2); write('.'); flush(output); v1:=v2; end; writeln; vwrite('pcoeff.v',v1); writeln; sdone('mkcoeff'); end { mkcoeff }.