123456789101112131415161718192021222324252627282930313233343536373839 |
- #include "f2c.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- #ifdef KR_headers
- longint pow_qq(ap, bp) longint *ap, *bp;
- #else
- longint pow_qq(longint *ap, longint *bp)
- #endif
- {
- longint pow, x, n;
- unsigned long long u; /* system-dependent */
- 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);
- }
- #ifdef __cplusplus
- }
- #endif
|