圆周率的近似计算公式
$$
?=\sum\limits_{k=0}^∞[\frac {1}{16^?}(\frac {4}{8k+1}−\frac {2}{8k+4}−\frac {1}{8k+5}−\frac {1}{8k+6})]
$$
圆周率的近似计算公式
$$
?=\sum\limits_{k=0}^∞[\frac {1}{16^?}(\frac {4}{8k+1}−\frac {2}{8k+4}−\frac {1}{8k+5}−\frac {1}{8k+6})]
$$
| |
| |
| pi = 0 |
| N = 10 |
| for k in range(N): |
| pi += 1 / pow(16, k) * (4 / (8 * k + 1) - 2 / (8 * k + 4) - 1 / |
| (8 * k + 5) - 1 / (8 * k + 6)) |
| print("圆周率值是: {}".format(pi)) |
| 圆周率值是: 3.1333333333333333 |
| 圆周率值是: 3.1414224664224664 |
| 圆周率值是: 3.1415873903465816 |
| 圆周率值是: 3.1415924575674357 |
| 圆周率值是: 3.1415926454603365 |
| 圆周率值是: 3.141592653228088 |
| 圆周率值是: 3.141592653572881 |
| 圆周率值是: 3.141592653588973 |
| 圆周率值是: 3.1415926535897523 |
| 圆周率值是: 3.1415926535897913 |
| |
| |
| from random import random |
| from time import perf_counter |
| |
| DARTS = 1000 * 1000 |
| hits = 0.0 |
| start = perf_counter() |
| |
| for i in range(1, DARTS + 1): |
| x, y = random(), random() |
| dist = pow(x**2 + y**2, 0.5) |
| if dist <= 1.0: |
| hits = hits + 1 |
| |
| pi = 4 * (hits / DARTS) |
| print("圆周率值是: {}".format(pi)) |
| print("运行时间是: {:.5f}s".format(perf_counter() - start)) |
| 圆周率值是: 3.141148 |
| 运行时间是: 0.77535s |
- 数学思维:找到公式,利用公式求解
- 计算思维:抽象一种过程,用计算机自动化求解
- 谁更准确? (不好说…)
- 使用time库的计时方法获得程序运行时间
- 改变撒点数量,理解程序运行时间的分布
- 初步掌握简单的程序性能分析方法
- 不求解圆周率,而是某个特定图形的面积
- 在工程计算中寻找蒙特卡罗方法的应用场景