Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Square root routine in C

13 views
Skip to first unread message

Ben Cranston

unread,
Apr 21, 1987, 5:11:08 PM4/21/87
to
Sorry about this, but private mail to the advertised address bounced from
not being able to open an SMTP connection to uxc.CSO.UIUC.EDU based on:

pwcs.StPaul.GOV
type = MX, class = IN, ttl = 172780, dlen = 20
preference = 20, name = uxc.CSO.UIUC.EDU

and an attempt to resend to rutgers.ARPA resulted in a "user unknown"
advisory...

> Date: Mon, 13 Apr 87 14:35:28 cst
> From: rutgers!da...@pwcs.StPaul.GOV (Dave Glowacki)

> In article <15...@umd5.umd.edu> you write:
>> Case in point: I just came up with a fast integer square-root routine for
>> a local project (written in C, available on request).

> I'm requesting!!! I was just about to start writing a routine to do
> this very thing. It'd sure save me a lot of work if you'd send me a copy.

Enjoy -zben

/* Fast integer square root test routine.
* Ben Cranston 3/9/87
*/

int isqrt(n)
int n;
{
int a,b,c;

a = n;
b = n;
if (n>1) {
while (a>0) {
a = a >> 2;
b = b >> 1;
}
do {
a = b;
c = n / b;
b = (c + a) >> 1;
} while ( (a-c)<-1 || (a-c)>1 );
}

return(b);
}

main(argc,argv)
int argc;
char **argv;
{
int num,root,last;

last = 0;
for ( num=1 ; num<65000 ; num++ ) {
root = isqrt(num);
if ( (root*root)>num ) {
printf("Too big!\n");
}
if ( ((root+1)*(root+1)) <= num ) {
printf("Too Small!\n");
}
if (last!=root) {
last = root;
printf("The square root of %4d is %3d\n",num,root);
}
}
}
--
umd5.UUCP <= {seismo!mimsy,ihnp4!rlgvax}!cvl!umd5!zben
Ben Cranston zben @ umd2.UMD.EDU Kingdom of Merryland UniSys 1100/92
umd2.BITNET "via HASP with RSCS"

0 new messages