pow_ii.c 436 Bytes
Newer Older
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
#include "clapack.h"

integer pow_ii(integer *ap, integer *bp)
{
    integer pow, x, n;
    unsigned long u;

    x = *ap;
    n = *bp;

    if (n <= 0) {
        if (n == 0 || x == 1)
            return 1;
        return x != -1 ? 0 : (n & 1) ? -1 : 1;
    }
    u = n;
    for(pow = 1; ; )
    {
        if(u & 01)
            pow *= x;
        if(u >>= 1)
            x *= x;
        else
            break;
    }
    return(pow);
}