1 #include "f2c.h" 2 3 #ifdef KR_headers pow_hh(ap,bp)4shortint pow_hh(ap, bp) shortint *ap, *bp; 5 #else 6 shortint pow_hh(shortint *ap, shortint *bp) 7 #endif 8 { 9 shortint pow, x, n; 10 unsigned u; 11 12 x = *ap; 13 n = *bp; 14 15 if (n <= 0) { 16 if (n == 0 || x == 1) 17 return 1; 18 if (x != -1) 19 return x == 0 ? 1/x : 0; 20 n = -n; 21 } 22 u = n; 23 for(pow = 1; ; ) 24 { 25 if(u & 01) 26 pow *= x; 27 if(u >>= 1) 28 x *= x; 29 else 30 break; 31 } 32 return(pow); 33 } 34