procedure rsum1(d: integer; var u,v: hreal);
{ part of rsum, used when u.si=v.si, u.ex-v.ex=d>0 }
var
  n: integer;
begin { rsum1 }
  with x3 do begin
    si:=u.si;
    n:=hdim-d+1;
    while (v.ma[n]=0) and (n<hdim) do n:=n+1;
    trunc:=(v.ma[n]>0);       
    j:=0;
    for n:=hdim downto d do begin
      j:=u.ma[n]+v.ma[n-d]+j;
      if j<10000 then begin
        ma[n]:=j;
        j:=0;
      end
      else begin
        ma[n]:=j-10000;
        j:=1;
      end;
    end;
    for n:=d-1 downto 0 do begin
      if j=0 then ma[n]:=u.ma[n]
      else begin
        ma[n]:=u.ma[n]+j;
        if ma[n]<10000 then j:=0 else ma[n]:=0;
      end;
    end;
    if j=0 then ex:=u.ex
    else begin
      ex:=u.ex+1;
      if ex>exmax then overflow:=true;
      if ma[n]>0 then trunc:=true;
      for n:=hdim downto 1 do ma[n]:=ma[n-1];
      ma[0]:=1;
    end;
  end;
end { rsum1 };

