首页 话题 小组 问答 好文 用户 我的社区 域名交易 唠叨

[教程]C语言计算π的多种高效方法揭秘

发布于 2025-07-13 04:00:29
0
607

1. 牛顿莱布尼茨公式牛顿莱布尼茨公式是计算π的经典方法之一,其基本思想是将圆的面积分割成无数个扇形,然后通过积分计算整个圆的面积。include include double calculate_...

1. 牛顿-莱布尼茨公式

牛顿-莱布尼茨公式是计算π的经典方法之一,其基本思想是将圆的面积分割成无数个扇形,然后通过积分计算整个圆的面积。

#include 
#include 
double calculate_pi(int n) { double pi = 0.0; for (int i = 0; i < n; i++) { double x = (i - n / 2.0) / n; pi += 4.0 / (1 + x * x); } return pi;
}
int main() { int n = 1000000; double pi = calculate_pi(n); printf("Calculated pi: %f\n", pi); return 0;
}

2. 蒙特卡洛方法

蒙特卡洛方法是一种基于概率的数值计算方法,通过随机抽样来估计π的值。

#include 
#include 
#include 
double calculate_pi_monte_carlo(int n) { int inside_circle = 0; for (int i = 0; i < n; i++) { double x = (double)rand() / RAND_MAX; double y = (double)rand() / RAND_MAX; if (x * x + y * y <= 1.0) { inside_circle++; } } return 4.0 * inside_circle / n;
}
int main() { int n = 1000000; double pi = calculate_pi_monte_carlo(n); printf("Calculated pi: %f\n", pi); return 0;
}

3. 莱蒙托夫方法

莱蒙托夫方法是另一种计算π的高效方法,其基本思想是通过计算正多边形的面积来逼近圆的面积。

#include 
#include 
double calculate_pi_lemniscate(int n) { double pi = 0.0; for (int i = 0; i < n; i++) { double x = cos(2 * M_PI * i / n); double y = sin(2 * M_PI * i / n); pi += x * x + y * y; } return M_PI * 4.0 / n;
}
int main() { int n = 1000000; double pi = calculate_pi_lemniscate(n); printf("Calculated pi: %f\n", pi); return 0;
}

4. 高斯-勒让德算法

高斯-勒让德算法是一种迭代算法,通过不断逼近π的值。

#include 
double calculate_pi_gauss_legendre() { double a = 1.0; double b = 1.0 / sqrt(2.0); double t = 0.25; double p = 1.0 / 4.0; while (b - a > 1e-15) { double a_next = (a + b) / 2.0; double b_next = sqrt(a * b); double t_next = t - p * (a - a_next) * (a - a_next); double p_next = 2.0 * p; a = a_next; b = b_next; t = t_next; p = p_next; } return a * 4.0;
}
int main() { double pi = calculate_pi_gauss_legendre(); printf("Calculated pi: %f\n", pi); return 0;
}

总结

以上介绍了多种计算π的高效方法,包括牛顿-莱布尼茨公式、蒙特卡洛方法、莱蒙托夫方法和高斯-勒让德算法。每种方法都有其特点和适用场景,可以根据实际情况选择合适的方法进行计算。

评论
一个月内的热帖推荐
csdn大佬
Lv.1普通用户

452398

帖子

22

小组

841

积分

赞助商广告
站长交流