1 /* -*-C-*- pow.c */
2 
3 /*
4 	computes a^b.
5 	uses log and exp
6 */
7 
8 #include "elefunt.h"
9 
10 #if STDC
11 sp_t
powf(sp_t arg1,sp_t arg2)12 powf(sp_t arg1, sp_t arg2)
13 #else /* NOT STDC */
14 sp_t
15 powf(arg1, arg2)
16 sp_t arg1,
17     arg2;
18 #endif /* STDC */
19 {
20     sp_t temp;
21     long l;
22 
23     if (arg1 <= 0.0F)
24     {
25 	if (arg1 == 0.0F)
26 	{
27 	    if (arg2 <= 0.0F)
28 		goto domain;
29 	    return (0.0F);
30 	}
31 	l = arg2;
32 	if (l != arg2)
33 	    goto domain;
34 	temp = expf(arg2 * logf(-arg1));
35 	if (l & 1)
36 	    temp = -temp;
37 	return (temp);
38     }
39     return (expf(arg2 * logf(arg1)));
40 
41 domain:
42     errno = EDOM;
43     return (0.0F);
44 }
45