fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. double power(double x, int n)
  5. {
  6. // key is to avoid re-calculating something you’ve done.
  7. if(n==0)
  8. return double(1);
  9. else if(n<0)
  10. return 1/power(x, -n);
  11. else
  12. {
  13. double pow2s[sizeof(int)*8];
  14. pow2s[0] = x;
  15. double result = 1;
  16. int bit = 0;
  17. while(true)
  18. {
  19. if(n&0x1)
  20. result *= pow2s[bit];
  21. n >>= 1;
  22. if(0==n)
  23. break;
  24. pow2s[bit+1] = pow2s[bit] * pow2s[bit];
  25. ++bit;
  26. }
  27. return result;
  28. }
  29. }
  30.  
  31.  
  32. int main() {
  33. std::cout << power(2.0, 0) << std::endl;
  34. std::cout << power(2.0, 1) << std::endl;
  35. std::cout << power(2.0, 3) << std::endl;
  36. std::cout << power(2.0, 5) << std::endl;
  37. std::cout << power(2.0, -4) << std::endl;
  38.  
  39. return 0;
  40. }
Success #stdin #stdout 0s 3140KB
stdin
Standard input is empty
stdout
1
2
8
32
0.0625