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