anchor.diff:    Result := Compare(Left, Right) = 0;
   end;
   
  +procedure BigRational.Error(Code: ErrorCode; Additional: array of const);
  +begin
  +  case Code of
  +    ecDivByZero:
  +      raise EDivByZero.Create(SDivByZero);
  +    ecBadArgument:
  +      raise EInvalidArgument.CreateFmt(SBadArgument, Additional);
  +    ecNoInfinity:
  +      raise EInvalidArgument.Create(SNoInfinity);
  +    ecZeroDenominator:
  +      raise EDivByZero.Create(SZeroDenominator);
  +  end;
  +end;
  +
   class operator BigRational.Explicit(const Value: BigRational): Integer;
   begin
  -  if Value.FDenom = BigInteger.One then
  -    Result := Integer(Value.FNum)
  -  else
  -    Result := Integer(Value.FNum div Value.FDenom);
  +  if Value.FDenominator = BigInteger.One then
  +    Result := Integer(Value.FNumerator)
  +  else
  +    Result := Integer(Value.FNumerator div Value.FDenominator);
   end;
   
   class operator BigRational.Explicit(const Value: BigRational): string;
  
positive.code: 
  class operator BigRational.Subtract(const Left, Right: BigRational): BigRational;
  begin
    Result.FDenom := Left.FDenom * Right.FDenom;
    Result.FNum := Left.FNum * Right.FDenom - Right.FNum * Left.FDenom;
    Result.Normalize;
  end;
  
  function BigRational.ToString: string;
  begin
    if FDenom = BigInteger.One then
      Result := FNum.ToString
    else
      Result := FNum.ToString + '/' + FDenom.ToString;
  end;
  
  class function BigRational.Subtract(const Left, Right: BigRational): BigRational;
  
negative.code: 
  class operator BigRational.Implicit(const Value: Integer): BigRational;
  begin
    Result.FNumerator := BigInteger(Value);
    Result.FDenominator := BigInteger.One;
  end;
  
  class operator BigRational.Implicit(const Value: string): BigRational;
  