diff options
author | jmz <jmz@FreeBSD.org> | 1997-04-13 01:16:58 +0000 |
---|---|---|
committer | jmz <jmz@FreeBSD.org> | 1997-04-13 01:16:58 +0000 |
commit | 438bdd8a9c9d390f13a4b05980c19b18e974d16c (patch) | |
tree | e809113557ae09d5ce13e9239ae81534708bd955 /lib/libF77/pow_zi.c | |
parent | 5d93c9d5fb208d10eacf608b44ee02d3cd5b4a16 (diff) | |
download | FreeBSD-src-438bdd8a9c9d390f13a4b05980c19b18e974d16c.zip FreeBSD-src-438bdd8a9c9d390f13a4b05980c19b18e974d16c.tar.gz |
Upgrade to the 1997/02/26 version.
Diffstat (limited to 'lib/libF77/pow_zi.c')
-rw-r--r-- | lib/libF77/pow_zi.c | 71 |
1 files changed, 37 insertions, 34 deletions
diff --git a/lib/libF77/pow_zi.c b/lib/libF77/pow_zi.c index 167e6ac..abb3cb2 100644 --- a/lib/libF77/pow_zi.c +++ b/lib/libF77/pow_zi.c @@ -8,44 +8,47 @@ extern void z_div(doublecomplex*, doublecomplex*, doublecomplex*); void pow_zi(doublecomplex *p, doublecomplex *a, integer *b) /* p = a**b */ #endif { -integer n; -unsigned long u; -double t; -doublecomplex x; -static doublecomplex one = {1.0, 0.0}; + integer n; + unsigned long u; + double t; + doublecomplex q, x; + static doublecomplex one = {1.0, 0.0}; -n = *b; -p->r = 1; -p->i = 0; + n = *b; + q.r = 1; + q.i = 0; -if(n == 0) - return; -if(n < 0) - { - n = -n; - z_div(&x, &one, a); - } -else - { - x.r = a->r; - x.i = a->i; - } - -for(u = n; ; ) - { - if(u & 01) + if(n == 0) + goto done; + if(n < 0) + { + n = -n; + z_div(&x, &one, a); + } + else { - t = p->r * x.r - p->i * x.i; - p->i = p->r * x.i + p->i * x.r; - p->r = t; + x.r = a->r; + x.i = a->i; } - if(u >>= 1) + + for(u = n; ; ) { - t = x.r * x.r - x.i * x.i; - x.i = 2 * x.r * x.i; - x.r = t; + if(u & 01) + { + t = q.r * x.r - q.i * x.i; + q.i = q.r * x.i + q.i * x.r; + q.r = t; + } + if(u >>= 1) + { + t = x.r * x.r - x.i * x.i; + x.i = 2 * x.r * x.i; + x.r = t; + } + else + break; } - else - break; + done: + p->i = q.i; + p->r = q.r; } -} |