|
|
1.1 root 1: /*
2: * "@(#)zabs.c 1.1"
3: */
4:
5: /* THIS IS BASED ON TAHOE FP REPRESENTATION */
6: #include <FP.h>
7:
8: double zabs(real, imag)
9: double real, imag;
10: {
11: double temp, sqrt();
12:
13: if(real < 0)
14: *(long int *)&real ^= SIGN_BIT;
15: if(imag < 0)
16: *(long int *)&imag ^= SIGN_BIT;
17: if(imag > real){
18: temp = real;
19: real = imag;
20: imag = temp;
21: }
22: if(imag == 0.) /* if((real+imag) == real) */
23: return(real);
24:
25: temp = imag/real;
26: temp = real*sqrt(1.0 + temp*temp); /*overflow!!*/
27: return(temp);
28: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.