1011 字
5 分钟
如何计算圆周率π和自然常数e
如何计算π和e的值
从小学就知道
但是一直不知道如何计算这个值。之前听说过祖冲之使用的是割圆法,但是我不会(T_T,流下了没有技术的泪水),也就没办法自己亲自体验一下这个计算过程,好在后来我发现了别的方法可以计算出圆周率的数值
- 数学法
后来偶尔看到数学上有一种方法
使用这种方法只要n足够大, 精度就能提高, 所以我就想用程序来尝试计算一下pi的值, 毕竟计算机比人做这种事情合适的多
- 蒙特卡洛模拟
后来又想到可以采用蒙特卡洛采样的方法也可以计算出来 π
计算方法如下, 我们随机生成 m 个 二维坐标<x, y>, 并且满足 。然后使用欧拉距离统计在圆内的坐标的数目 n , 再除以生成的所有坐标的数目 。由于我们的采样范围只覆盖了的圆, 所以结果需要乘上4 就是圆周率的结果了,我们还可以去除随机出来的重复数字或者通过人为限定随机精度来加快计算
在线计算π
精度:
结果:
如何计算自然常数
自然常数也一直是我不理解的一个数字
之前听说过一个类比,讲的挺好的,但当时并没有去仔细考虑过计算自然常数的方法数学常数e的含义
自然常数的意义
自然常数代表单位时间内,数量翻倍增长的极限
比如: 你有1万块钱, 假如存到银行, 1年到期的复利是100%, 那你到明年最多可以拿到多少钱 , 答案是: 2.71828万
这里的关键在于如何计算利息:
如果按照每半年计息, 1年后等于 万
如果按照每3个月计息一次: 万
如果按照每1个月计算一次 万
如果再往下, 每天, 每分钟, 每秒, 最终得到的就是 的极限就是 2.71828…
如何计算e
后来也找到一种数学方法可以计算,计算方法如下
于是一时好奇就使用程序实现了一下,如下:
import math
class Calculator:
num = 10000000 a = 1 res = 0
def getPi(self): for n in range(1, self.num): m = 1 / (1 + 2 * n) if n % 2 == 0: self.a = self.a + m else: self.a = self.a - m print(self.a * 4)
def getE(self): for n in range(0, self.num): self.res = self.res + 1 / math.factorial(n) print(self.res)
c = Calculator()c.getPi()c.getE()在线演示
计算E
精度:
结果:
计算年龄
计算你当前的年龄, 精确值, 让你清晰感受时间的流逝
生日:
结果:
如何计算圆周率π和自然常数e
https://leriou.github.io/posts/2016-03-03-calculate-pi/