aboutsummaryrefslogtreecommitdiff
path: root/gcc/f/runtime/libF77/cabs.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/f/runtime/libF77/cabs.c')
-rw-r--r--gcc/f/runtime/libF77/cabs.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/gcc/f/runtime/libF77/cabs.c b/gcc/f/runtime/libF77/cabs.c
new file mode 100644
index 00000000000..2fad044e884
--- /dev/null
+++ b/gcc/f/runtime/libF77/cabs.c
@@ -0,0 +1,27 @@
+#ifdef KR_headers
+extern double sqrt();
+double f__cabs(real, imag) double real, imag;
+#else
+#undef abs
+#include <math.h>
+double f__cabs(double real, double imag)
+#endif
+{
+double temp;
+
+if(real < 0)
+ real = -real;
+if(imag < 0)
+ imag = -imag;
+if(imag > real){
+ temp = real;
+ real = imag;
+ imag = temp;
+}
+if((real+imag) == real)
+ return(real);
+
+temp = imag/real;
+temp = real*sqrt(1.0 + temp*temp); /*overflow!!*/
+return(temp);
+}