home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / g77-0.5.15-src.tgz / tar.out / fsf / g77 / f / runtime / libF77 / pow_ii.c < prev    next >
C/C++ Source or Header  |  1996-09-28  |  421b  |  34 lines

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