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