pow_qq.c   [plain text]


#include "f2c.h"

longint
pow_qq (longint * ap, longint * bp)
{
  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);
}