procedure rsum2(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 { rsum2 }
  with x3 do begin
    si:=u.si;
    k:=hdim;
    while (v.ma[k]=0) and (k>hdim-d+1) do k:=k-1;
    if v.ma[k]>0 then begin
      j:=1;
      trunc:=true;
    end
    else j:=0;
    for n:=hdim downto d do begin
      j:=u.ma[n]-v.ma[n-d]-j;
      if j<0 then begin
        ma[n]:=j+10000;
        j:=1;
      end
      else begin
        ma[n]:=j;
        j:=0;
      end;
    end;
    for n:=d-1 downto 1 do begin
      if j=0 then ma[n]:=u.ma[n]
      else begin
        ma[n]:=u.ma[n]-j;
        if ma[n]<0 then ma[n]:=9999 else j:=0;
      end;
    end;
    ma[0]:=u.ma[0]-j;
    if ma[0]>0 then ex:=u.ex
    else begin
      ex:=u.ex-1;
      if ex<-exmax then underflow:=true;
      for n:=0 to hdim-1 do ma[n]:=ma[n+1];
      if not trunc then ma[hdim]:=0
      else if k>hdim-d+1 then ma[hdim]:=9999-v.ma[hdim-d+1]
      else begin
        ma[hdim]:=10000-v.ma[k];
        trunc:=false;
        rnormalize(x3);
      end;
    end;
  end;
end { rsum2 };

