procedure isfactorial(i: integer; var x:scalar);
var
  k: integer;
  rp,rt: hreal;
begin { isfactorial }
  if i>9999 then writeln('isfactorial: error - argument out of range')
  else begin
    x:=sone;
    irset(1,rp);
    for k:=i downto 2 do begin
      irmult(k,rp);
      if (k mod hdim)=2 then begin
        r_prod(up,rp,x.u,rt);
        x.u:=rt;
        r_prod(down,rp,x.l,rt);
        x.l:=rt;
        irset(1,rp);
      end;
    end;
  end;
end { isfactorial };

