一种计算e的方法

时间:2021-05-01 20:12:21

原文地址: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())