xref: /csrg-svn/old/libm/libom/pow.c (revision 13471)
1*13471Ssam /*	@(#)pow.c	4.2	06/30/83	*/
29937Ssam 
39937Ssam /*
49937Ssam 	computes a^b.
59937Ssam 	uses log and exp
69937Ssam */
79937Ssam 
89937Ssam #include	<errno.h>
99937Ssam int errno;
109937Ssam double log(), exp();
119937Ssam 
129937Ssam double
pow(arg1,arg2)139937Ssam pow(arg1,arg2)
149937Ssam double arg1, arg2;
159937Ssam {
169937Ssam 	double temp;
179937Ssam 	long l;
189937Ssam 
19*13471Ssam #ifdef vax
209937Ssam 	asm("	bispsw	$0xe0");
21*13471Ssam #endif
229937Ssam 	if(arg1 <= 0.) {
239937Ssam 		if(arg1 == 0.) {
249937Ssam 			if(arg2 <= 0.)
259937Ssam 				goto domain;
269937Ssam 			return(0.);
279937Ssam 		}
289937Ssam 		l = arg2;
299937Ssam 		if(l != arg2)
309937Ssam 			goto domain;
319937Ssam 		temp = exp(arg2 * log(-arg1));
329937Ssam 		if(l & 1)
339937Ssam 			temp = -temp;
349937Ssam 		return(temp);
359937Ssam 	}
369937Ssam 	return(exp(arg2 * log(arg1)));
379937Ssam 
389937Ssam domain:
399937Ssam 	errno = EDOM;
409937Ssam 	return(0.);
419937Ssam }
42