#define BITSPERINTEGER 32 #define TOP2BITS(x) (x>>30) unsigned int isqrt (unsigned int x) { int i; unsigned int a = 0, e = 0, r = 0; for (i=0; i < (BITSPERLONG >> 1); i++) { r <<= 2; r += TOP2BITS(x); x <<= 2; a <<= 1; e = (a<<1) | 1; if (r >= e) { r -= e; a++; } } return a; }