pow_di.c 448 B

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