35 std::pair<value_type, value_type> _a;
48 std::pair<value_type, value_type> compute_a(
int n)
50 auto a = std::make_pair(0.0, 0.0);
53 std::generate(it1, it2, [i = 1, &a]()
mutable {
55 a.second += 1. / (i * i);
65 constexpr auto compute_b1(
double n)
67 return (n + 1.0) / (3.0 * (n - 1.0));
74 constexpr auto compute_b2(
double n)
76 return (2.0 * (n * n + n + 3.0)) / (9.0 * n * (n - 1.0));
83 constexpr auto compute_c1(value_type a1, value_type b1)
92 constexpr auto compute_c2(
double n, value_type a1, value_type a2, value_type b2)
94 return b2 - (n + 2.0) / (a1 * n) + a2 / (a1 * a1);
99 constexpr auto compute_e1(value_type c1, value_type a1)
106 constexpr auto compute_e2(value_type a1, value_type a2, value_type c2)
108 return c2 / (a1 * a1 + a2);
115 constexpr auto compute_D(value_type pi, value_type S, value_type a1, value_type e1, value_type e2)
117 return (pi - S / a1) / std::sqrt(e1 * S + e2 * S * (S - 1.0));
129 : _pi(pi), _S(S), _n(n), _a(compute_a(n)), _b1(compute_b1(n)), _b2(compute_b2(n)),
130 _c1(compute_c1(_a.first, _b1)), _c2(compute_c2(n, _a.first, _a.second, _b2)), _e1(compute_e1(_c1, _a.first)),
131 _e2(compute_e2(_a.first, _a.second, _c2)), _D(compute_D(pi, S, _a.first, _e1, _e2))
137 constexpr value_type
get()
142 value_type pi()
const
154 value_type a1()
const
158 value_type a2()
const
162 value_type b1()
const
166 value_type b2()
const
170 value_type c1()
const
174 value_type c2()
const
178 value_type e1()
const
182 value_type e2()
const