Annotation of researchv10no/cmd/cfront/libC/complex/oper.c, revision 1.1.1.1

1.1       root        1: 
                      2: #include "complex.h"
                      3: #include "const.h"
                      4: 
                      5: complex operator*(complex a1,complex a2) 
                      6: {
                      7:        return complex(a1.re*a2.re-a1.im*a2.im, a1.re*a2.im+a1.im*a2.re);
                      8: }
                      9: 
                     10: 
                     11: complex operator/(complex a1, complex a2)
                     12: {
                     13:        register double r = a2.re;      /* (r,i) */
                     14:        register double i = a2.im;
                     15:        register double ti;             /* (tr,ti) */
                     16:        register double tr;
                     17: 
                     18:        tr = ABS(r);
                     19:        ti = ABS(i);
                     20: 
                     21:        if (tr <= ti) {
                     22:                ti = r/i;
                     23:                tr = i * (1 + ti*ti);
                     24:                r = a1.re;
                     25:                i = a1.im;
                     26:        }
                     27:        else {
                     28:                ti = -i/r;
                     29:                tr = r * (1 + ti*ti);
                     30:                r = -a1.im;
                     31:                i = a1.re;
                     32:        }
                     33: 
                     34:        return complex( (r*ti + i)/tr, (i*ti - r)/tr );
                     35: }
                     36: 
                     37: void complex::operator*=(complex a)
                     38: {
                     39:        register double r = re*a.re - im*a.im;
                     40:        register double i = re*a.im + im*a.re;
                     41:        re = r;
                     42:        im = i;
                     43: }
                     44: 
                     45: void complex::operator/=(complex a)
                     46: {
                     47:        complex quot, temp1, temp2;
                     48: 
                     49:        if ( (temp2.re = a.re) < 0 ) temp2.re = -temp2.re;
                     50:        if ( (temp2.im = a.im) < 0 ) temp2.im = -temp2.im;
                     51:        if ( temp2.re <= temp2.im) {
                     52:                temp2.im = a.re/a.im;
                     53:                temp2.re = a.im * (1 + temp2.im*temp2.im);
                     54:                temp1 = *this;
                     55:        }
                     56:        else {
                     57:                temp2.im = -a.im/a.re;
                     58:                temp2.re = a.re * (1 + temp2.im*temp2.im);
                     59:                temp1.re = -im;
                     60:                temp1.im = re;
                     61:        }
                     62:        re = (temp1.re * temp2.im + temp1.im) / temp2.re;
                     63:        im = (temp1.im * temp2.im - temp1.re) / temp2.re;
                     64: }

unix.superglobalmegacorp.com

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