rokicki@Neon.Stanford.EDU (Tomas G. Rokicki) (12/31/89)
Here's a different root algorithm I just made up (based on decimal root
extraction ala long division.) I'm sure it's in widespread use already
but I just had to reply to that `solution' that required a multiplication
per step . . .
unsigned long root(v) /* for up to 32-bit values */
register unsigned long v ;
{
register unsigned long t, r ;
for (t=0x40000000, r=0; t; t >>= 2)
if (t + r <= v) {
v -= t + r ;
r = (r >> 1) | t ;
} else
r = r >> 1 ;
return r ;
}