pi的计算公式无限精度c代码
时间: 2023-09-16 16:07:38 浏览: 66
以下是使用Chudnovsky算法计算π的C代码,可以无限精度计算:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <gmp.h>
#define PRECISION 1000000
void chudnovsky(int digits) {
mpf_set_default_prec(PRECISION);
mpf_t pi, a, b, c, d, e, f, g, h;
mpf_init(pi);
mpf_init(a);
mpf_init(b);
mpf_init(c);
mpf_init(d);
mpf_init(e);
mpf_init(f);
mpf_init(g);
mpf_init(h);
mpf_set_ui(a, 13591409);
mpf_set_ui(b, 545140134);
mpf_set_ui(c, 640320);
mpf_set_ui(d, 100100025);
mpf_set_ui(e, 327843840);
mpf_set_ui(f, 53360);
mpf_set_ui(g, 12);
mpf_set_ui(h, 545140134);
int k;
mpf_t ak, bk, ck, dk, ek, fk, gk, hk;
mpf_init(ak);
mpf_init(bk);
mpf_init(ck);
mpf_init(dk);
mpf_init(ek);
mpf_init(fk);
mpf_init(gk);
mpf_init(hk);
for (k = 0; k < digits; k++) {
mpf_set_ui(ak, 545140134);
mpf_mul_ui(ak, ak, 262537412);
mpf_add_ui(ak, ak, 13591409 * (k + 1));
mpf_set_ui(bk, 1155);
mpf_mul_ui(bk, bk, k + 1);
mpf_add_ui(bk, bk, -540);
mpf_set_ui(ck, 1);
mpf_mul_ui(ck, ck, 426880);
mpf_pow_ui(ck, ck, 3);
mpf_mul_ui(ck, ck, 10005);
mpf_sqrt(ck, ck);
mpf_mul_ui(ck, ck, 2);
mpf_mul_ui(ck, ck, k + 1);
mpf_add_ui(ck, ck, 1);
mpf_set_ui(dk, 1);
mpf_mul_ui(dk, dk, 100100025);
mpf_pow_ui(dk, dk, k + 1);
mpf_set_ui(ek, 1);
mpf_mul_ui(ek, ek, 327843840);
mpf_pow_ui(ek, ek, k + 1);
mpf_mul_ui(ek, ek, 53360);
mpf_set_ui(fk, 1);
mpf_mul_ui(fk, fk, 12);
mpf_pow_ui(fk, fk, k + 1);
mpf_set_ui(gk, 1);
mpf_mul_ui(gk, gk, 10939058860032000ULL);
mpf_pow_ui(gk, gk, k + 1);
mpf_set_ui(hk, 545140134);
mpf_pow_ui(hk, hk, 2 * (k + 1));
mpf_t temp;
mpf_init(temp);
mpf_set(temp, ak);
mpf_mul(temp, temp, bk);
mpf_mul(temp, temp, ck);
mpf_mul(temp, temp, dk);
mpf_mul(temp, temp, ek);
mpf_mul(temp, temp, fk);
mpf_mul(temp, temp, gk);
mpf_div(temp, temp, hk);
if (k % 2 == 0) {
mpf_add(pi, pi, temp);
} else {
mpf_sub(pi, pi, temp);
}
mpf_clear(temp);
}
mpf_mul_ui(pi, pi, 12);
mpf_ui_div(pi, 1, pi);
char* pi_str = mpf_get_str(NULL, &k, 10, digits + 1, pi);
printf("%.*s.%s\n", 1, pi_str, pi_str + 1);
free(pi_str);
mpf_clear(pi);
mpf_clear(a);
mpf_clear(b);
mpf_clear(c);
mpf_clear(d);
mpf_clear(e);
mpf_clear(f);
mpf_clear(g);
mpf_clear(h);
mpf_clear(ak);
mpf_clear(bk);
mpf_clear(ck);
mpf_clear(dk);
mpf_clear(ek);
mpf_clear(fk);
mpf_clear(gk);
mpf_clear(hk);
}
int main() {
chudnovsky(1000);
return 0;
}
```
这里使用了GNU多精度数学库(GMP),可以在Ubuntu上通过以下命令安装:
```
sudo apt-get install libgmp-dev
```
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)