#include <vector>
#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

double bernoulli(int n)
{
    static vector<double> b{1.0, -0.5, 1.0/6.0, 0.0};
    if (n < b.size()) return b[n];
    if (n%2 && n > 2) return 0;
    double sum = 0;
    double a = -1;
    for(int k = 1; k <= n; ++k)
    {
        a = a*(n-k+1)/(k+1);
        sum += a*bernoulli(n-k);
    }
    b.resize(n+1);
    b[n] = sum;
    return sum;
}

double series(double x, double eps)
{
    double sum = 1, a = 1, z = 1;
    for(int n = 1; abs(z) > eps; ++n)
    {
        a = -a * 2*x*x/n/(2*n-1);
        z = a * bernoulli(2*n);
        sum += z;
    }
    return sum/x;
}

int main()
{
    for(double x = -3.1; x < 3.11; x += 0.2)
    {
        cout << setw(5) << x << setw(10) << 1/tan(x) << setw(10) << series(x,1e-7) << endl;
    }
}

