Annotation of 41BSD/lib/libmp/msqrt.c, revision 1.1

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

unix.superglobalmegacorp.com

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