#include #include "mpfr.h" using namespace std; int main(int argc, char **argv) { mpfr_t a_0, b_0, s_0, a_k, b_k, s_k, approx_pi, tmp_1, tmp_2; mpfr_inits2(3600000, a_0, b_0, s_0, a_k, b_k, s_k, approx_pi, tmp_1, tmp_2, NULL); mpfr_set_d(a_0, 1.0, MPFR_RNDF); mpfr_sqrt_ui(b_0, 2, MPFR_RNDF); mpfr_div_ui(b_0, b_0, 2, MPFR_RNDF); mpfr_set_d(s_0, 0.5, MPFR_RNDF); for (int k = 1; k <= 20; k++) { mpfr_add(a_k, a_0, b_0, MPFR_RNDF); mpfr_div_ui(a_k, a_k, 2, MPFR_RNDF); mpfr_mul(b_k, a_0, b_0, MPFR_RNDF); mpfr_sqrt(b_k, b_k, MPFR_RNDF); mpfr_add(tmp_1, a_k, b_k, MPFR_RNDF); mpfr_sub(tmp_2, a_k, b_k, MPFR_RNDF); mpfr_mul(tmp_1, tmp_1, tmp_2, MPFR_RNDF); mpfr_ui_pow_ui(tmp_2,2, k, MPFR_RNDF); mpfr_mul(tmp_1, tmp_1, tmp_2, MPFR_RNDF); mpfr_sub(s_k, s_0, tmp_1, MPFR_RNDF); mpfr_set(a_0, a_k, MPFR_RNDF); mpfr_set(b_0, b_k, MPFR_RNDF); mpfr_set(s_0, s_k, MPFR_RNDF); } mpfr_mul(approx_pi, a_0, a_0, MPFR_RNDF); mpfr_mul_ui(approx_pi, approx_pi, 2, MPFR_RNDF); mpfr_div(approx_pi, approx_pi, s_0, MPFR_RNDF); mpfr_printf("%.1000000Rf\n", approx_pi); return 0; }