cabs.c 494 B

123456789101112131415161718192021222324252627282930313233
  1. #ifdef KR_headers
  2. extern double sqrt();
  3. double f__cabs(real, imag) double real, imag;
  4. #else
  5. #undef abs
  6. #include "math.h"
  7. #ifdef __cplusplus
  8. extern "C" {
  9. #endif
  10. double f__cabs(double real, double imag)
  11. #endif
  12. {
  13. double temp;
  14. if(real < 0)
  15. real = -real;
  16. if(imag < 0)
  17. imag = -imag;
  18. if(imag > real){
  19. temp = real;
  20. real = imag;
  21. imag = temp;
  22. }
  23. if((real+imag) == real)
  24. return(real);
  25. temp = imag/real;
  26. temp = real*sqrt(1.0 + temp*temp); /*overflow!!*/
  27. return(temp);
  28. }
  29. #ifdef __cplusplus
  30. }
  31. #endif