注册 登录
编程论坛 C++教室

e的x次方 点击点击,快点哟!

跳跳鱼 发布于 2011-09-11 15:59, 2571 次点击
用c++编写一个函数,求e的x次方( ⊙o⊙ )?大侠们看看?
8 回复
#2
yuccn2011-09-11 22:00
#defile E 2.71828

double Get(int x)
{
    double dbResult = 0;
    if (x == 0) {
        return 1;
    }

    for (int i = 0; i < x; i++) {
        dbResult *= E;
    }
    return dbResult;
}

 还没有对参数是负数进行处理。
#3
ucyan2011-09-11 23:42
用for循环就行啦~
#4
袁德凯2011-09-12 18:20
#include <math.h>
#include <iostream>
using namespace std;

double hs(int);
int main()
{
  int x;
cin>>x;
cout<<hs(x)<<endl;
}
double hs(int)
{
   return pow(2.71828,x);
}
#5
pangding2011-09-12 21:56
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 编辑 ]
#6
xg56992011-09-12 22:12
回复 5楼 pangding
我草牛B啊,如果有人能这样看自己写的程序并指出不足那真是拾到宝了!
#7
DestinyOooO2011-09-15 19:45
《数值分析》
#8
pangding2011-09-15 22:26
嗯。看来 7楼 也比较专业~~
#9
guilin08222011-10-01 22:26
5楼的,专业。用的是微积分。
1