
Сообщение от
shoorick
портировал данный код из другой известной книжки
По структуре очень похож на то, что я сделал выше для квадратного. Наверное, несложно будет модифицировать моё творение, чтобы оно кубический корень извлекало.
Вот моё в таком-же виде:
Код:
int isqrt(unsigned x){
int s;
unsigned y,b;
s=14;
y=0;
while (s>=0) {
y = 2*y;
b = (2*y+1)<<s;
if (x>=b) {
x = x - b;
y = y + 1;
}
s = s - 2;
}
return y;
}
- - - Добавлено - - -
Только вот вычислять 3*y*(y+1)+1 вместо 2*y+1 чуточку сложнее 
- - - Добавлено - - -
Интересно, а можно вывести формулу для b = ???, чтобы оно например корень 5-й степени извлекало?
- - - Добавлено - - -
2*y+1 = (y+1)^2 - y^2
3*y*(y+1)+1 = 3*y^2 + 3*y + 1 = (y+1)^3 - y^3
Что у нас там для пятой степени получается? 
- - - Добавлено - - -
(y+1)^5 - y^5 = 5*y^4 + 10*y^3 + 10*y^2 + 5*y + 1 = 5*y*(y*(y*(y+2)+2)+1)+1
Щас проверим 
- - - Добавлено - - -
Ха, работает 
Код:
int isqrt5(unsigned x){
int s;
unsigned y,b;
s=20;
y=0;
while (s>=0) {
y = 2*y;
b = (5*y*(y*(y*(y+2)+2)+1)+1)<<s;
if (x>=b) {
x = x - b;
y = y + 1;
}
s = s - 5;
}
return y;
}
Разрядность для тестов увеличил.