编写程序求自然对数e的近似值

编写程序,求自然对数e的近似值,要求误差小于0.00001。就算公式如下:e=1+1/1!+1/2!+1/3!+...+1/n!

要求:误差小于0.00001
   Private Sub Command1_Click()
   Dim i%, n&, t!, e!
   e = 2
   i = 1
   t = 1
   Do While t > 0.00001
   i = i + 1
   t = t / i
   e = e + t
   Loop
   Print "计算了"; i; "项目和是:"; e
   Print Exp(1) ‘与上句输出值进行对比以证明算法的正确性
   End Sub
这种算法是有问题的,不能达到指定的精度的!t <= 0.00001 时结束了循环,这个只是到这一项为止,该项的值比精度小,但是不能保证被舍掉的后面部分(无穷项之和)阶乘的倒数之和比指定的精度小!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-13
算法说明
   累加形式:V=V+e
   连乘形式:V=V*e
   其中:V是变量,e是递增表达式。累加和连乘一般通过循环结构来实现。
   注意:需在执行循环体前对变量V赋初值。一般的,累加时置初值0;连乘时置初值为1.
   举例
   求N!的结果。
   Private Sub Command1_Click()
   Dim n%, i%, s&
   n = Val(InputBox("输入n"))
   s = 1
   For i = 1 To n
   s = s * i
   Next i
   Print s
   End Sub
   错误的写法:
   Private Sub Command1_Click()
   Dim n%, i%, s&
   n = Val(InputBox("输入n"))
   For i = 1 To n
   s = 1 ‘赋初值语句位置不对!
   s = s * i
   Next i
   Print s ‘输出s的值为n,而不是n!
   End Sub
   应用举例
   根据下列公式,求自然对数e的的近似值。
  
   要求:误差小于0.00001
   Private Sub Command1_Click()
   Dim i%, n&, t!, e!
   e = 2
   i = 1
   t = 1
   Do While t > 0.00001
   i = i + 1
   t = t / i
   e = e + t
   Loop
   Print "计算了"; i; "项目和是:"; e
   Print Exp(1) ‘与上句输出值进行对比以证明算法的正确性
   End Sub
   解题技巧
   1) 由于这类题目往往是根据精度要求来求值,因此我们不能预知具体循环次数,所以这类题目一般用Do循环,很少用For循环。设定循环变量和通项变量,注意各变量的初值;
   2) 分解通项表达式中各因子,并分别将各因子用循环变量表示;
   3) 如果步骤2中有的因子比较复杂,难以直接用变量表示,此时可以考虑使用Function过程;
   4) 根据步骤1、2、3,写出通项表达式;
   5) 根据精度要求(往往是通项小于10负多少次方这样一个关系表达式),写出一条满足精度要求后跳出循环的语句。通常是用:if 通项表达式>10^(-N) then exit do ,注意这句话一般需放在累加或者连乘式之前。本回答被网友采纳
相似回答