Я для целочисленного вычисления RMS пользовал такой вот кусок: uint16_t sqrt_GLS (uint32_t x)  // Hardware algorithm [GLS] (честно спер с тырнетов)
{
   uint32_t m, y, b;
   m = 0x40000000;
   y = 0;
   while (m != 0)
   {              // Do 16 times.
      b = y | m;
      y = y >> 1;
      if (x >= b)
      {
         x = x - b; 
         y = y | m;
      }
      m = m >> 2;
   }
   return y;
}