# 自然常数 e
# 简介
e,作为数学常数,是自然对数函数的底数。有时被称为欧拉数(Euler's number),以瑞士数学家欧拉命名;还有个较少见的名字纳皮尔常数,用来纪念苏格兰数学家约翰·纳皮尔引进对数。它是一个无限不循环小数,JavaScript 里,其近似值为 Math.E = 2.718281828459045
# 定义
# SymPy 实现
from sympy import *
n = symbols('n')
expr = (1 + 1/n) ** n
e = limit(expr, n, oo)
e.evalf()
# JS 实现
const max = 1e11
const e = (1 + 1 / max) ** max
console.log(e)
注意:由于理论上的定义,n 应当趋向于正无穷,但实际计算中,受 js 计算精度限制,max 取太大会有计算误差。自然底数 e 还有另一个无穷级数的定义:
根据这个,我们可以有限步地求前 N 项的和,我们需要用 js 实现一个阶乘
const factorial = (n) => {
if (n < 2) return 1
return n * factorial(n - 1)
}
function getE() {
let ret = 0
const max = 20
for (let n = 0; n < max; n++) {
ret += 1 / factorial(n)
}
return ret
}
console.log(getE())
2.7182818284590455
可以看到, 取前 20 位,工程上就足够可用了
# 应用
自然底数 e 有很多实际用处。
例:假设有 1000 个乒乓球,其中有一个是可以中奖的红球,那么抽 1000 次,中奖的概率是多少?
解:这是一个从数量为 N 的样本中“有放回地”随机抽取出1个"数量同样为N"的样本。其计算公式为 将有 360 次左右可以抽中红球。这个值与你直觉相符吗?
通过前面的定义,我们可以推导出,这个极限值为 1/e, 即
# 勘误
2020.11.16 更新
非常抱歉,上一个 case 说得不对,抽中的概率应该是