fork download
  1. #include <vector>
  2. #include <iostream>
  3. #include <iomanip>
  4. #include <cmath>
  5.  
  6. using namespace std;
  7.  
  8. double bernoulli(int n)
  9. {
  10. static vector<double> b{1.0, -0.5, 1.0/6.0, 0.0};
  11. if (n < b.size()) return b[n];
  12. if (n%2 && n > 2) return 0;
  13. double sum = 0;
  14. double a = -1;
  15. for(int k = 1; k <= n; ++k)
  16. {
  17. a = a*(n-k+1)/(k+1);
  18. sum += a*bernoulli(n-k);
  19. }
  20. b.resize(n+1);
  21. b[n] = sum;
  22. return sum;
  23. }
  24.  
  25. double series(double x, double eps)
  26. {
  27. double sum = 1, a = 1, z = 1;
  28. for(int n = 1; abs(z) > eps; ++n)
  29. {
  30. a = -a * 2*x*x/n/(2*n-1);
  31. z = a * bernoulli(2*n);
  32. sum += z;
  33. }
  34. return sum/x;
  35. }
  36.  
  37. int main()
  38. {
  39. for(double x = -3.1; x < 3.11; x += 0.2)
  40. {
  41. cout << setw(5) << x << setw(10) << 1/tan(x) << setw(10) << series(x,1e-7) << endl;
  42. }
  43. }
  44.  
  45.  
Success #stdin #stdout 0s 4440KB
stdin
Standard input is empty
stdout
 -3.1   24.0288      -nan
 -2.9   4.05835      -nan
 -2.7   2.11538      -nan
 -2.5   1.33865      -nan
 -2.3  0.893484  0.893484
 -2.1  0.584848  0.584848
 -1.9  0.341635  0.341635
 -1.7  0.129927  0.129927
 -1.5-0.0709148-0.0709149
 -1.3 -0.277616 -0.277616
 -1.1 -0.508968 -0.508968
 -0.9 -0.793551 -0.793551
 -0.7  -1.18724  -1.18724
 -0.5  -1.83049  -1.83049
 -0.3  -3.23273  -3.23273
 -0.1  -9.96664  -9.96664
  0.1   9.96664   9.96664
  0.3   3.23273   3.23273
  0.5   1.83049   1.83049
  0.7   1.18724   1.18724
  0.9  0.793551  0.793551
  1.1  0.508968  0.508968
  1.3  0.277616  0.277616
  1.5 0.0709148 0.0709149
  1.7 -0.129927 -0.129927
  1.9 -0.341635 -0.341635
  2.1 -0.584848 -0.584848
  2.3 -0.893484 -0.893484
  2.5  -1.33865      -nan
  2.7  -2.11538      -nan
  2.9  -4.05835      -nan
  3.1  -24.0288      -nan