calculate 1000000 numbers
This commit is contained in:
36
src/main.cpp
Normal file
36
src/main.cpp
Normal 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;
|
||||
}
|
Reference in New Issue
Block a user