|
|
1.1 ! root 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: * @(#)pow_ii.c 5.3 6/26/85 ! 7: * ! 8: * Corrections by Robert P. Corbett, 1983 March 2 ! 9: * Revised to restore portability, 1983 March 4 ! 10: */ ! 11: ! 12: ! 13: long int pow_ii(ap, bp) ! 14: long int *ap, *bp; ! 15: { ! 16: long int pow, x, n; ! 17: ! 18: pow = 1; ! 19: x = *ap; ! 20: n = *bp; ! 21: ! 22: if (n == 0) ! 23: return ( 1L ); ! 24: ! 25: if (x == 0) ! 26: { ! 27: if( n > 0 ) ! 28: return ( 0L ); ! 29: else ! 30: return ( 1/x ); ! 31: } ! 32: ! 33: if (x == 1) ! 34: return ( 1L ); ! 35: ! 36: if (x == -1) ! 37: { ! 38: if (n < 0) ! 39: { ! 40: if (n < -2) ! 41: n += 2; ! 42: n = -n; ! 43: } ! 44: if (n % 2 == 0) ! 45: return ( 1L ); ! 46: else ! 47: return ( -1L ); ! 48: } ! 49: ! 50: if (n > 0) ! 51: for( ; ; ) ! 52: { ! 53: if(n & 01) ! 54: pow *= x; ! 55: if(n >>= 1) ! 56: x *= x; ! 57: else ! 58: break; ! 59: } ! 60: else ! 61: pow = 0; ! 62: ! 63: return(pow); ! 64: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.