| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | #include "f2c.h"#ifdef __cplusplusextern "C" {#endif#ifdef KR_headersVOID pow_zi(p, a, b) 	/* p = a**b  */ doublecomplex *p, *a; integer *b;#elseextern 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 q, x;	static doublecomplex one = {1.0, 0.0};	n = *b;	q.r = 1;	q.i = 0;	if(n == 0)		goto done;	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)			{			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;		} done:	p->i = q.i;	p->r = q.r;	}#ifdef __cplusplus}#endif
 |