1: /* 2: * "@(#)pow_di.c 1.1" 3: */ 4: 5: double pow_di(ap, bp) 6: double *ap; 7: long int *bp; 8: { 9: double pow, x; 10: long int n; 11: 12: pow = 1; 13: x = *ap; 14: n = *bp; 15: 16: if(n != 0) 17: { 18: if(n < 0) 19: { 20: if(x == 0) 21: { 22: return(pow); 23: } 24: n = -n; 25: x = 1/x; 26: } 27: for( ; ; ) 28: { 29: if(n & 01) 30: pow *= x; 31: if(n >>= 1) 32: x *= x; 33: else 34: break; 35: } 36: } 37: return(pow); 38: }