假设点可以均匀的扔到正方形中。如果一共扔N次,其中M次扔进内切圆内,则可以推导出计算π的公式:


随机计算π
大体思路:获得随机数(x,y),判断x*x + y*y是否在单位圆内,可以得到M的个数。
程序:
#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 1000 int main() { int i, M=0; double x, y, pi; srand((int)time(NULL)); for (i=0; i<N; i++) { x = rand() / (double)RAND_MAX; y = rand() / (double)RAND_MAX; if (x*x + y*y < 1) M++; } pi = (4.0 * M) / N; printf("pi:%f\n", pi); return 0; }
注意:有关随机数的获取可以参考:http://www.cnblogs.com/kaituorensheng/archive/2013/03/05/2944008.html
一组结果:
画出网格计算π
大体思路:

程序:
#include <stdio.h> #include <stdlib.h> #include <math.h> #define n 10000000 int main() { int i; double sum = 0; for (i=0; i<n; i++) sum += sqrt((double)n*n - (double)i*i); printf("%f\n", 4.0*sum /n/n); }
一组结果:

本文介绍了一种使用随机投点的方法来估算圆周率π的数值。通过在单位正方形内随机生成点并判断这些点是否落在内切圆内,统计落入圆内的点数与总点数的比例,进而计算出π的近似值。提供了两种不同的C语言程序实现。
1833

被折叠的 条评论
为什么被折叠?



