Annotation of cci/usr/src/usr.lib/libF77/cabs.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  *     "@(#)cabs.c     1.1"
                      3:  */
                      4: /*
                      5:  *     THIS IS STRONGLY BASED ON THE TAHOE FLOATING POINT REPRESENTATION!
                      6:  *     The casts are meant to speed things up by avoiding double precision
                      7:  *     instructions.
                      8:  */
                      9: 
                     10: #include <FP.h>
                     11: 
                     12: float cabs(real, imag)
                     13: float real, imag;
                     14: {
                     15: float temp;
                     16: fortran float sqrt();
                     17: 
                     18: if(real < 0)
                     19:        ((sp_format *)&real)->sign = 0;         /* real = -real; */
                     20: if(imag < 0)
                     21:        ((sp_format *)&imag)->sign = 0;         /* imag = -imag; */
                     22: if(imag > real){
                     23:        temp = *(float *)&real;
                     24:        *(float *)&real = *(float *)&imag;
                     25:        *(float *)&imag = temp;
                     26: }
                     27: if(*(float *)&imag == 0)               /* originally if((real+imag)==real) ! */
                     28:        return(*(float *)&real);
                     29: 
                     30: temp = (*(float *)&imag)/(*(float *)&real);
                     31: temp = (*(float *)&real)*sqrt(1.0 + temp*temp);  /*overflow!!*/
                     32: return(temp);
                     33: }

unix.superglobalmegacorp.com

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