1. 牛顿莱布尼茨公式牛顿莱布尼茨公式是计算π的经典方法之一,其基本思想是将圆的面积分割成无数个扇形,然后通过积分计算整个圆的面积。include include double calculate_...
牛顿-莱布尼茨公式是计算π的经典方法之一,其基本思想是将圆的面积分割成无数个扇形,然后通过积分计算整个圆的面积。
#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;
} 蒙特卡洛方法是一种基于概率的数值计算方法,通过随机抽样来估计π的值。
#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;
} 莱蒙托夫方法是另一种计算π的高效方法,其基本思想是通过计算正多边形的面积来逼近圆的面积。
#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;
} 高斯-勒让德算法是一种迭代算法,通过不断逼近π的值。
#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;
} 以上介绍了多种计算π的高效方法,包括牛顿-莱布尼茨公式、蒙特卡洛方法、莱蒙托夫方法和高斯-勒让德算法。每种方法都有其特点和适用场景,可以根据实际情况选择合适的方法进行计算。