1*47940Sbostic /*- 2*47940Sbostic * Copyright (c) 1980 The Regents of the University of California. 3*47940Sbostic * All rights reserved. 422936Skre * 5*47940Sbostic * %sccs.include.proprietary.c% 610513Sdlw */ 710513Sdlw 8*47940Sbostic #ifndef lint 9*47940Sbostic static char sccsid[] = "@(#)pow_hh.c 5.3 (Berkeley) 04/12/91"; 10*47940Sbostic #endif /* not lint */ 11*47940Sbostic pow_hh(ap,bp)1210513Sdlwshort pow_hh(ap, bp) 1310513Sdlw short *ap, *bp; 1410513Sdlw { 1523778Sjerry short int pow, x, n; 1610513Sdlw 1723778Sjerry pow = 1; 1823778Sjerry x = *ap; 1923778Sjerry n = *bp; 2010513Sdlw 2123778Sjerry if (n == 0) 2223778Sjerry return ( 1L ); 2323778Sjerry 2423778Sjerry if (x == 0) 2523778Sjerry { 2623778Sjerry if( n > 0 ) 2723778Sjerry return ( 0L ); 2823778Sjerry else 2923778Sjerry return ( 1/x ); 3023778Sjerry } 3123778Sjerry 3223778Sjerry if (x == 1) 3323778Sjerry return ( 1L ); 3423778Sjerry 3523778Sjerry if (x == -1) 3623778Sjerry { 3723778Sjerry if (n < 0) 3810513Sdlw { 3923778Sjerry if (n < -2) 4023778Sjerry n += 2; 4123778Sjerry n = -n; 4223778Sjerry } 4323778Sjerry if (n % 2 == 0) 4423778Sjerry return ( 1L ); 4510513Sdlw else 4623778Sjerry return ( -1L ); 4723778Sjerry } 4823778Sjerry 4923778Sjerry if (n > 0) 5023778Sjerry for( ; ; ) 5123778Sjerry { 5223778Sjerry if(n & 01) 5323778Sjerry pow *= x; 5423778Sjerry if(n >>= 1) 5523778Sjerry x *= x; 5623778Sjerry else 5723778Sjerry break; 5810513Sdlw } 5923778Sjerry else 6023778Sjerry pow = 0; 6123778Sjerry 6223778Sjerry return(pow); 6310513Sdlw } 64