2 楼的程序不能解决 x 不是整数的情况。4楼的程度则容易使人追问为什么不用 exp(x)?(或者 pow 是怎么实现的?)
3楼的可以认为是一个比较朦胧的说法,这个当然得用循环算。
对于这个问题的计算,利用 e^x 的泰勒展式就可以计算,泰勒展式是指下述公式:
e^x = 1 + x + x^2/2! + x^3/3! + ... + x^n/n! + ...
它是一个无穷级数,截断至第 n 项,产生的误差(记前 n 项部的分和为 Sn)
ε = | e^x - Sn | <= | x^n/n! | <= |x|^n/n!
由误差估计式中可以看出,在 n 固定的情况下,由于 n 的阶乘是个常数。所以要想循环的次数尽量少,方法是想办法减小 x 的绝对值。
关于约化 |x| 的有一些相关的方法。我就不提了。即使不约化,直接循环算,时间上一般也还可以接受。
另外一个小知识是:求任意底的幂或对数,往往要间接用到自然对数底的幂或对数。由以下恒等式即得:
log_a(b) = ln(b) / ln(a)
x^y = e^( yln(x) )
[
本帖最后由 pangding 于 2011-9-12 21:58 编辑 ]