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