Цитата Сообщение от 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;
}
Разрядность для тестов увеличил.