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)12powf(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