一种计算e的方法
原文地址:http://hankjin.blog.163.com/blog/static/3373193720108811316123/
原理:平均e个(0,1)之间的随机数之和会大于1.
原因:n个数之和小于1的概率是1/n!,则n个数之和大于1的概率则是1-1/n!;
恰好n个数之后大于1的概率,等于n个数之后大于1的概率减去n-1个数之和大于1的概率,即
(1-1/n!)
- (1-1/(n-1)!) = (n-1)/n!
则n的期望为
sum( (n-1)/n! * n ) = sum( (n-1)/(n-1)! )
=
sum(n/n!)
又因为sum(n/n!)=e,所以平均e个(0,1)之间随机数之和大于1.
代码如下:可惜收敛较慢,效率较低。
#!/usr/bin/python
'''A
method to calculate e
'''
__author__ =
"hankjin<hankjin@163.com>"
import random,math
def
calce(iter=1000000):
''' calculate math.e with <iter>
iterations.
'''
res=0
for i in range(iter):
tmp=0.0
while tmp<1:
res+=1
tmp+=random.random()
return float(res)/iter
if
__name__=='__main__':
print('real e=', math.e)
print('calculated
e=%s', calce())