calculate 1000000 numbers

This commit is contained in:
2024-01-17 15:30:47 +08:00
commit 484e148cde
3 changed files with 128 additions and 0 deletions

36
src/main.cpp Normal file
View File

@ -0,0 +1,36 @@
#include <iostream>
#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;
}