pow_hh.c 489 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #include "f2c.h"
  2. #ifdef __cplusplus
  3. extern "C" {
  4. #endif
  5. #ifdef KR_headers
  6. shortint pow_hh(ap, bp) shortint *ap, *bp;
  7. #else
  8. shortint pow_hh(shortint *ap, shortint *bp)
  9. #endif
  10. {
  11. shortint pow, x, n;
  12. unsigned u;
  13. x = *ap;
  14. n = *bp;
  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. #ifdef __cplusplus
  35. }
  36. #endif