#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;
}
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGNtYXRoPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmRvdWJsZSBiZXJub3VsbGkoaW50IG4pCnsKICAgIHN0YXRpYyB2ZWN0b3I8ZG91YmxlPiBiezEuMCwgLTAuNSwgMS4wLzYuMCwgMC4wfTsKICAgIGlmIChuIDwgYi5zaXplKCkpIHJldHVybiBiW25dOwogICAgaWYgKG4lMiAmJiBuID4gMikgcmV0dXJuIDA7CiAgICBkb3VibGUgc3VtID0gMDsKICAgIGRvdWJsZSBhID0gLTE7CiAgICBmb3IoaW50IGsgPSAxOyBrIDw9IG47ICsraykKICAgIHsKICAgICAgICBhID0gYSoobi1rKzEpLyhrKzEpOwogICAgICAgIHN1bSArPSBhKmJlcm5vdWxsaShuLWspOwogICAgfQogICAgYi5yZXNpemUobisxKTsKICAgIGJbbl0gPSBzdW07CiAgICByZXR1cm4gc3VtOwp9Cgpkb3VibGUgc2VyaWVzKGRvdWJsZSB4LCBkb3VibGUgZXBzKQp7CiAgICBkb3VibGUgc3VtID0gMSwgYSA9IDEsIHogPSAxOwogICAgZm9yKGludCBuID0gMTsgYWJzKHopID4gZXBzOyArK24pCiAgICB7CiAgICAgICAgYSA9IC1hICogMip4Kngvbi8oMipuLTEpOwogICAgICAgIHogPSBhICogYmVybm91bGxpKDIqbik7CiAgICAgICAgc3VtICs9IHo7CiAgICB9CiAgICByZXR1cm4gc3VtL3g7Cn0KCmludCBtYWluKCkKewogICAgZm9yKGRvdWJsZSB4ID0gLTMuMTsgeCA8IDMuMTE7IHggKz0gMC4yKQogICAgewogICAgICAgIGNvdXQgPDwgc2V0dyg1KSA8PCB4IDw8IHNldHcoMTApIDw8IDEvdGFuKHgpIDw8IHNldHcoMTApIDw8IHNlcmllcyh4LDFlLTcpIDw8IGVuZGw7CiAgICB9Cn0KCg==