fork download
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. double pow2(double x, int n) {
  5.  
  6. double ans = 1;
  7.  
  8. if(n == 0) return 1;
  9.  
  10. if(n < 0) x = 1 / x;
  11.  
  12. while(n) {
  13.  
  14. if(n % 2) ans *= x;
  15.  
  16. x *= x;
  17.  
  18. n /= 2;
  19. }
  20.  
  21. return ans;
  22. }
  23.  
  24. double pow2_rec(double x, int n) {
  25.  
  26. double t;
  27.  
  28. if(n == 0) return 1;
  29.  
  30. t = pow2_rec(x, n / 2);
  31.  
  32. if( (n & 1) == 0) return t * t;
  33. //if( n % 2 == 0) return t * t;
  34.  
  35. else {
  36.  
  37. if(n > 0) return x * t * t;
  38.  
  39. else
  40.  
  41. return (t * t) / x;
  42. }
  43. }
  44.  
  45. int main(int argc, char const *argv[])
  46. {
  47. printf("%f\n", pow(3.14, -5));
  48.  
  49. printf("%f\n", pow2(3.14, -5));
  50.  
  51. printf("%f\n", pow2_rec(3.14, -5));
  52.  
  53. return 0;
  54. }
Success #stdin #stdout 0s 4376KB
stdin
Standard input is empty
stdout
0.003276
0.003276
0.003276