|
|
Power 6/32 Unix version 1.21
/*
* "@(#)cabs.c 1.1"
*/
/*
* THIS IS STRONGLY BASED ON THE TAHOE FLOATING POINT REPRESENTATION!
* The casts are meant to speed things up by avoiding double precision
* instructions.
*/
#include <FP.h>
float cabs(real, imag)
float real, imag;
{
float temp;
fortran float sqrt();
if(real < 0)
((sp_format *)&real)->sign = 0; /* real = -real; */
if(imag < 0)
((sp_format *)&imag)->sign = 0; /* imag = -imag; */
if(imag > real){
temp = *(float *)ℜ
*(float *)&real = *(float *)&imag;
*(float *)&imag = temp;
}
if(*(float *)&imag == 0) /* originally if((real+imag)==real) ! */
return(*(float *)&real);
temp = (*(float *)&imag)/(*(float *)&real);
temp = (*(float *)&real)*sqrt(1.0 + temp*temp); /*overflow!!*/
return(temp);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.