anchor.diff:  {             following conditions are met:                                  }
   {                                                                            }
   {             * Redistributions of source code must retain the above         }
  -{               copyright notice, this list of conditions and the following  }
  -{               disclaimer.                                                  }
  +{               copyright notices, this list of conditions and the           }
  +{               following disclaimer.                                        }
   {             * Redistributions in binary form must reproduce the above      }
   {               copyright notice, this list of conditions and the following  }
   {               disclaimer in the documentation and/or other materials       }
   {               provided with the distribution.                              }
   {                                                                            }
  -{ Disclaimer: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER "AS IS"      }
  +{ Disclaimer: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS "AS IS"     }
   {             AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT      }
   {             LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND      }
   {             FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO         }
  
positive.code:   until False;
  end;
  
  class procedure BigInteger.SqrtRemainder(const Radicand: BigInteger; var Root, Remainder: BigInteger);
  begin
    Root := Sqrt(Radicand);
    Remainder := Radicand - Sqr(Root);
  end;
  
  class procedure BigInteger.DivThreeHalvesByTwo(
  
negative.code:   case Index of
      0: Exit(BigInteger.Zero);
      1: Exit(Radicand);
      2: Exit(BaseCaseSqrt(Radicand));
    end;
    if Index < 0 then
      Error(ecNegativeExponent, ['NthRoot']);
  