46 lines
		
	
	
	
		
			518 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
	
		
			518 B
		
	
	
	
		
			C
		
	
	
	
	
	
#include "f2c.h"
 | 
						|
 | 
						|
VOID pow_zi(p, a, b) 	/* p = a**b  */
 | 
						|
doublecomplex *p, *a;
 | 
						|
integer *b;
 | 
						|
{
 | 
						|
integer n;
 | 
						|
double t;
 | 
						|
doublecomplex x;
 | 
						|
static doublecomplex one = {1.0, 0.0};
 | 
						|
 | 
						|
n = *b;
 | 
						|
p->r = 1;
 | 
						|
p->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( ; ; )
 | 
						|
	{
 | 
						|
	if(n & 01)
 | 
						|
		{
 | 
						|
		t = p->r * x.r - p->i * x.i;
 | 
						|
		p->i = p->r * x.i + p->i * x.r;
 | 
						|
		p->r = t;
 | 
						|
		}
 | 
						|
	if(n >>= 1)
 | 
						|
		{
 | 
						|
		t = x.r * x.r - x.i * x.i;
 | 
						|
		x.i = 2 * x.r * x.i;
 | 
						|
		x.r = t;
 | 
						|
		}
 | 
						|
	else
 | 
						|
		break;
 | 
						|
	}
 | 
						|
}
 |