Annotation of researchv10dc/libc/math/hypot.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * hypot -- sqrt(p*p+q*q), but overflows only if the result does.
                      3:  * See Cleve Moler and Donald Morrison,
                      4:  * ``Replacing Square Roots by Pythagorean Sums,''
                      5:  * IBM Journal of Research and Development,
                      6:  * Vol. 27, Number 6, pp. 577-581, Nov. 1983
                      7:  */
                      8: double hypot(p, q)
                      9: double p, q;
                     10: {
                     11:        double r, s, pfac;
                     12:        if(p<0) p = -p;
                     13:        if(q<0) q = -q;
                     14:        if(p<q){ r=p; p=q; q=r; }
                     15:        if(p==0) return 0;
                     16:        pfac = p;
                     17:        r = q = q/p;
                     18:        p = 1.0;
                     19:        for(;;){
                     20:                r*=r;
                     21:                s=r+4;
                     22:                if(s==4)
                     23:                        return p*pfac;
                     24:                r/=s;
                     25:                p+=2*r*p;
                     26:                q*=r;
                     27:                r=q/p;
                     28:        }
                     29: }
                     30: double cabs(z)
                     31: struct{
                     32:        double x, y;
                     33: }z;
                     34: {
                     35:        return hypot(z.x, z.y);
                     36: }

unix.superglobalmegacorp.com

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