anchor.diff:    Result.Compact;
   end;
   
  +function BigInteger.LowestSetBit: Integer;
  +var
  +  I: Integer;
  +begin
  +  if FData = nil then
  +    Exit(-1);
  +  I := 0;
  +  Result := 0;
  +  while FData[I] = 0 do
  +  begin
  +    Inc(Result, CLimbBits);
  +    Inc(I);
  +  end;
  +  Inc(Result, LowestOneBit(FData[I]));
  +end;
  +
   class function BigInteger.Max(const Left, Right: BigInteger): BigInteger;
   begin
     if Left > Right then
  
positive.code:     function BitLength: Integer;
  
      /// <summary>Returns the number of all bits that are set, assuming two's complement. The sign bit is
      ///  included in the count.</summary>
      function BitCount: Integer;
  
      /// <summary>Returns a copy of the current BigInteger, with a unique copy of the data.</summary>
      function Clone: BigInteger;
  
negative.code:   Result.Compact;
  end;
  
  class function BigInteger.Negate(const Value: BigInteger): BigInteger;
  begin
    Result.FData := Value.FData;
    Result.FSize := Value.FSize xor SignMask;
  end;
  
  class operator BigInteger.Negative(const Value: BigInteger): BigInteger;
  begin
    // Magnitude is not modified, so a shallow copy is enough!
  