返回信息流def calc_e(x): #此函数是用来计算
reverse = False
if x < 0: # 处理负数
x = -x
reverse = True
ln2 = 0.69314718055994530941723212145818
c = x / ln2
a = int(c+0.5)
b = x - a*ln2
y = (2 ** a) * calc_e_small(b)
if reverse:
return 1/y
return y
def calc_e_small(x):
n = 10
f = np.arange(1, n+1).cumprod()
b = np.array([x]*n).cumprod()
return np.sum(b / f) + 1
这是一条镜像帖。来源:北邮人论坛 / python / #17472同步于 2017/3/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
这个代码是做指数函数的泰勒展开的,可是看不懂。。。求讲解
hz455122041
2017/3/6镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
应该是防止x太大的时候溢出了,所以把x变成小于0的数,也就是b再计算泰勒展开吧.calc_e_small就是计算e(b)的泰勒展开的。
由 e(x * ln2) = e(ln(2 ^ x))= 2 ^x;
所以 (2^a) * e(x - a*ln2) = e(a * ln2) * e(x - a*ln2) = e(x)
【 在 hz455122041 的大作中提到: 】
: def calc_e(x): #此函数是用来计算
: reverse = False
: if x < 0: # 处理负数
: ...................
谢谢!了解!
【 在 hxidkd 的大作中提到: 】
: 应该是防止x太大的时候溢出了,所以把x变成小于0的数,也就是b再计算泰勒展开吧.calc_e_small就是计算e(b)的泰勒展开的。
: 由 e(x * ln2) = e(ln(2 ^ x))= 2 ^x;
: 所以 (2^a) * e(x - a*ln2) = e(a * ln2) * e(x - a*ln2) = e(x)