Annotation of 42BSD/usr.lib/libmp/msqrt.c, revision 1.1.1.1

1.1       root        1: /*     @(#)msqrt.c     4.1     12/25/82        */
                      2: 
                      3: #include <mp.h>
                      4: msqrt(a,b,r) MINT *a,*b,*r;
                      5: {      MINT x,junk,y;
                      6:        int j;
                      7:        x.len=junk.len=y.len=0;
                      8:        if(a->len<0) fatal("msqrt: neg arg");
                      9:        if(a->len==0)
                     10:        {       b->len=0;
                     11:                r->len=0;
                     12:                return(0);
                     13:        }
                     14:        if(a->len%2==1) x.len=(1+a->len)/2;
                     15:        else x.len=1+a->len/2;
                     16:        x.val=xalloc(x.len,"msqrt");
                     17:        for(j=0;j<x.len;x.val[j++]=0);
                     18:        if(a->len%2==1) x.val[x.len-1]=0400;
                     19:        else x.val[x.len-1]=1;
                     20:        xfree(b);
                     21:        xfree(r);
                     22: loop:
                     23:        mdiv(a,&x,&y,&junk);
                     24:        xfree(&junk);
                     25:        madd(&x,&y,&y);
                     26:        sdiv(&y,2,&y,(short *)&j);
                     27:        if(mcmp(&x,&y)>0)
                     28:        {       xfree(&x);
                     29:                move(&y,&x);
                     30:                xfree(&y);
                     31:                goto loop;
                     32:        }
                     33:        xfree(&y);
                     34:        move(&x,b);
                     35:        mult(&x,&x,&x);
                     36:        msub(a,&x,r);
                     37:        xfree(&x);
                     38:        return(r->len);
                     39: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.