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