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)139937Ssampow(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