public class Main {public static void main(String[] args) {
double e=1,sum=1//e的初值为1,sum用来存放n!
int i=1
while(sum<Math.pow(10, 1000000)){ //当sum大于10的1000000次方的时候我们认为已近似的
sum=i*sum相等了,如果这个数设置的更大就会更加接近e
e=1.0/sum+e
i++
}
System.out.println("e="+e)
}} 程序是经验证的,可以在编译环境上运行!绝对没问题~
要求:误差小于0.00001Private 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 时结束了循环,这个只是到这一项为止,该项的值比精度小,但是不能保证被舍掉的后面部分(无穷项之和)阶乘的倒数之和比指定的精度小!
/*
2.718282
Press any key to continue
*/
#include <stdio.h>unsigned Fact(unsigned n) {
unsigned i,fact = 1
for(i = 1 i <= n ++i)
fact *= i
return fact
}
double Exp(int n) {
double e = 1.0
int i
for(i = 1i <= ni++)
e += 1.0/Fact(i)
return e
}
int main() {
printf("%lf\n",Exp(20))
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)