
unsigned int sqrt(unsigned long input)
{
  unsigned char i;
  unsigned long remainder = 0;
  unsigned long divisor = 0;

  for(i = 16; i > 0; i--)
  {
    divisor <<= 1;
    remainder = (remainder << 2) + (input >> 30);
    input <<= 2;
    if(divisor < remainder)
    {
      divisor++;
      remainder -= divisor;
      divisor++;
    }
  }
  divisor >>= 1;
  return divisor;
}
