Я для целочисленного вычисления 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;
}