1 /* 2 * Copyright (c) 1980 Regents of the University of California. 3 * All rights reserved. The Berkeley software License Agreement 4 * specifies the terms and conditions for redistribution. 5 */ 6 7 #ifndef lint 8 static char sccsid[] = "@(#)pow.c 5.1 (Berkeley) 05/08/85"; 9 #endif not lint 10 11 /* 12 computes a^b. 13 uses log and exp 14 */ 15 16 #include <errno.h> 17 int errno; 18 double log(), exp(); 19 20 double 21 pow(arg1,arg2) 22 double arg1, arg2; 23 { 24 double temp; 25 long l; 26 27 asm(" bispsw $0xe0"); 28 if(arg1 <= 0.) { 29 if(arg1 == 0.) { 30 if(arg2 <= 0.) 31 goto domain; 32 return(0.); 33 } 34 l = arg2; 35 if(l != arg2) 36 goto domain; 37 temp = exp(arg2 * log(-arg1)); 38 if(l & 1) 39 temp = -temp; 40 return(temp); 41 } 42 return(exp(arg2 * log(arg1))); 43 44 domain: 45 errno = EDOM; 46 return(0.); 47 } 48