|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1980 Regents of the University of California. ! 3: * All rights reserved. The Berkeley software License Agreement ! 4: * specifies the terms and conditions for redistribution. ! 5: * ! 6: * @(#)pow_ci.c 5.3 1/24/88 ! 7: */ ! 8: ! 9: #include "complex" ! 10: ! 11: #ifdef tahoe ! 12: ! 13: #define C_MULEQ(A,B) \ ! 14: t = (A).real * (B).real - (A).imag * (B).imag,\ ! 15: (A).imag = (A).real * (B).imag + (A).imag * (B).real,\ ! 16: (A).real = t /* A *= B */ ! 17: ! 18: void ! 19: pow_ci(p, a, b) /* p = a**b */ ! 20: complex *p, *a; ! 21: long *b; ! 22: { ! 23: register long n = *b; ! 24: register float t; ! 25: complex x; ! 26: ! 27: x = *a; ! 28: p->real = (float)1, p->imag = (float)0; ! 29: if (!n) ! 30: return; ! 31: if (n < 0) { ! 32: c_div(&x, p, a); ! 33: n = -n; ! 34: } ! 35: while (!(n&1)) { ! 36: C_MULEQ(x, x); ! 37: n >>= 1; ! 38: } ! 39: for (*p = x; --n > 0; C_MULEQ(*p, x)) ! 40: while (!(n&1)) { ! 41: C_MULEQ(x, x); ! 42: n >>= 1; ! 43: } ! 44: } ! 45: ! 46: #else /* !tahoe */ ! 47: ! 48: extern void pow_zi(); ! 49: ! 50: void ! 51: pow_ci(p, a, b) /* p = a**b */ ! 52: complex *p, *a; ! 53: long *b; ! 54: { ! 55: dcomplex p1, a1; ! 56: ! 57: a1.dreal = a->real; ! 58: a1.dimag = a->imag; ! 59: ! 60: pow_zi(&p1, &a1, b); ! 61: ! 62: p->real = p1.dreal; ! 63: p->imag = p1.dimag; ! 64: } ! 65: ! 66: #endif /* tahoe */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.