xref: /csrg-svn/old/libm/liboldnm/pow.c (revision 20003)
1 /*
2 	computes a^b.
3 	uses log and exp
4 */
5 
6 #include	<errno.h>
7 int errno;
8 double log(), exp();
9 
10 double
11 pow(arg1,arg2)
12 double arg1, arg2;
13 {
14 	double temp;
15 	long l;
16 
17 	asm("	bispsw	$0xe0");
18 	if(arg1 <= 0.) {
19 		if(arg1 == 0.) {
20 			if(arg2 <= 0.)
21 				goto domain;
22 			return(0.);
23 		}
24 		l = arg2;
25 		if(l != arg2)
26 			goto domain;
27 		temp = exp(arg2 * log(-arg1));
28 		if(l & 1)
29 			temp = -temp;
30 		return(temp);
31 	}
32 	return(exp(arg2 * log(arg1)));
33 
34 domain:
35 	errno = EDOM;
36 	return(0.);
37 }
38