summaryrefslogtreecommitdiffstats
path: root/contrib/libf2c/libF77/c_div.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/libf2c/libF77/c_div.c')
-rw-r--r--contrib/libf2c/libF77/c_div.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/contrib/libf2c/libF77/c_div.c b/contrib/libf2c/libF77/c_div.c
new file mode 100644
index 0000000..b5ede0e
--- /dev/null
+++ b/contrib/libf2c/libF77/c_div.c
@@ -0,0 +1,43 @@
+#include "f2c.h"
+
+extern void sig_die (char *, int);
+void
+c_div (complex * c, complex * a, complex * b)
+{
+ double ratio, den;
+ double abr, abi, cr;
+
+ if ((abr = b->r) < 0.)
+ abr = -abr;
+ if ((abi = b->i) < 0.)
+ abi = -abi;
+ if (abr <= abi)
+ {
+ if (abi == 0)
+ {
+#ifdef IEEE_COMPLEX_DIVIDE
+ float af, bf;
+ af = bf = abr;
+ if (a->i != 0 || a->r != 0)
+ af = 1.;
+ c->i = c->r = af / bf;
+ return;
+#else
+ sig_die ("complex division by zero", 1);
+#endif
+ }
+ ratio = (double) b->r / b->i;
+ den = b->i * (1 + ratio * ratio);
+ cr = (a->r * ratio + a->i) / den;
+ c->i = (a->i * ratio - a->r) / den;
+ }
+
+ else
+ {
+ ratio = (double) b->i / b->r;
+ den = b->r * (1 + ratio * ratio);
+ cr = (a->r + a->i * ratio) / den;
+ c->i = (a->i - a->r * ratio) / den;
+ }
+ c->r = cr;
+}
OpenPOWER on IntegriCloud