#include <iostream>
#include <iomanip>
#include <cmath>
#include <chrono>

class muTimer
{
    using Clock = std::chrono::high_resolution_clock;
    bool active = false;
    Clock::duration   duration_;
    Clock::time_point start_ = Clock::now(), stop_ = Clock::now();

    muTimer(const muTimer&)             = delete;
    muTimer& operator=(const muTimer&)  = delete;
public:
    using ns       = std::chrono::nanoseconds;
    using mks      = std::chrono::microseconds;
    using ms       = std::chrono::milliseconds;
    muTimer() { reset(); start(); }
    ~muTimer() = default;
    muTimer& reset()
    {
        duration_ = std::chrono::nanoseconds(0);
        active    = false;
        return *this;
    }
    muTimer& start()
    {
        if (!active)
        {
            start_ = Clock::now();
            active = true;
        }
        return *this;
    }
    muTimer& stop()
    {
        if (active)
        {
            stop_      = Clock::now();
            duration_ += stop_ - start_;
            active     = false;
        }
        return *this;
    }
    template<typename T = mks>
        unsigned long long duration()
    {
        return static_cast<unsigned long long>
            (std::chrono::duration_cast<T>(stop_-start_).count());
    }
};


using namespace std;

double pi = 3.14159265358;

double Paul(double x, double eps)
{
    double y = 1, summa = 0, last = 1;;
    for (; fabs(last) > eps;)
    {
        last = pow(-1, y) * pow(x, 2 * y - 1) / (2 * y - 1);
        summa += last;
        y+=1;
    }
    return pi/2 + summa;
}

double Harry(double x, double eps)
{
    double summ = pi/2 - x, x2n_1 = -x;
    x *= x;

    for(int k = 3; fabs(x2n_1/k) > eps; k += 2)
    {
        x2n_1 *= -x;
        summ += x2n_1/k;
    }
    return summ;
}

int main()
{
    {
        muTimer mt;
        double z = 0;
        for(double x = 0; x < 0.95; x += 0.000001)
            z += Paul(x,1e-10);
        mt.stop();
        cout << z << " for " << mt.duration<>() << " mks\n";
    }
    {
        muTimer mt;
        double z = 0;
        for(double x = 0; x < 0.95; x += 0.000001)
            z += Harry(x,1e-10);
        mt.stop();
        cout << z << " for " << mt.duration<>() << " mks\n";
    }
}
