在下是JAVA新手,正在修課,寫作業遇到瓶頸
(1)利用e=1+1/1!+1/2!+...求e
(2)利用e^x=1+x/1!+x^2/2!+...+x^n/n!求e^x
想說直接算第二題目應該就行了
寫完了也可以編譯,只是只有x=1的時候跑出來的答案算正確
麻煩幫我改正一下錯誤或寫一下正確程式碼(含註解),感激不盡!
=========================
我寫的程式如下:
import java.util.Scanner; // program uses Scanner
public class HW4_38bc
{
// main method begins program execution
public static void main( String args[] )
{
//列印程式目的
System.out.println("This program is use to approximate e^x by formula e^x=1+x/1!+x^2/2!+…+x^n/n!.");
System.out.println("Please enter the number x:");
Scanner inputx = new Scanner( System.in );//讀入x值
double x= inputx.nextDouble();
int n=19;//設定要加多少項
if (x==0)
System.out.println("e^x=1");
else//計算x不等於零時,尤拉數的後面n-1項
{
double e=0;
while (n>0)
{
double xn=Math.pow(x,n);//計算x^n
// operator ^ cannot be applied to double,int
// Math提供pow(double, double)方法來作指數運算
int nlayer=n;
int number=nlayer;
//計算n!
while (nlayer>1)
{
number*=--nlayer;
} //end while
//計算x^n/n!並存入e
e+=xn/number;
n--;
} //end while
e=e+1;//把第一項(1)加上去
System.out.printf("e^x=%2f",e);
}
} // end main
} // end class
2007-10-20 18:37:19 · 2 個解答 · 發問者 走奔客 3 in 電腦與網際網路 ➔ 程式設計
我用的方法是分別算出每一項的x^n跟n!再相除
然後從後面開始一項一項加到e裡面
也就是從x^n/n!開始加到x/1!
最後再加上1(因為我不知道怎麼寫0!)
試過x=1~x=5
大概在x=4開始誤差變大,x=5的時候誤差超大
所以我不太確定是邏輯錯誤還是因為精準度的關係
如果是精準度問題,那我應該怎麼解決呢?
因為我已經是用double了...
另外想請問n的大小有沒有限制
因為我看到在C裡面會有溢位的問題
非常感謝
2007-10-22 08:40:20 · update #1
//抱歉拉...與其慢慢看懂你在寫啥...直接重寫讓你參考下
import java.util.*;
public class QQ{
static double e(double N){//第(1)題方法
double a = 0;
for(int n=0;n
double t = 1;
for(int i=1;i<=n;i ){//階乘迴圈
t=t*i;
}//階乘迴圈end
a = a (1/t);
}//第n+1項迴圈end
return a;
}
static double e2(double x,double n){//第(2)題方法
double a=0;
for(int i=0;i
for(int j=0;j
x*=x;
}//x的平方迴圈end
double t=1;
for(int j=1;j<=i;j ){//階乘迴圈
t*=j;
}//階乘迴圈end
a =(double)(x/t);
}//第n+1項迴圈end
return a;
}
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("This program is use to approximate e by formula e=1 1/1! 1/2! … 1/n!.");
double B=scan.nextInt();
System.out.println(e(B));
System.out.println("This program is use to approximate e^x by formula e^x=1 x/1! x^2/2! … x^n/n!.");
System.out.println("Please enter the number x:");
double X=scan.nextInt();
System.out.println("Please enter the number n:");
double Y=scan.nextInt();
System.out.println(e2(X,Y));
}
}
2007-10-21 01:41:08 補充:
有夠靠腰的拉
貼出的"加" 號會被 知識加 刪掉 = =
我上傳好嘞 貼下網址...
http://depot051.googlepages.com/QQ.java
2007-10-23 20:20:24 補充:
摁摁,看了下你的程式碼....
我想...程式邏輯沒錯
會有誤差,是n欄位數目的關係
畢竟尤拉數是得...相加無限次的...
當然拉...n愈大,結果愈精準...但把n指定成無限是不可能的吧 XD
n指定別的數,改變相加的次數,答案又會改嘞
2007-10-23 20:22:40 補充:
至於0階乘怎麼寫? 請參考我寫出來的 method XD
http://depot051.googlepages.com/QQ.java
2007-10-23 20:25:12 補充:
QQ.java 裡面有註解 "階乘迴圈" 的部份 =v=
2007-10-20 21:35:48 · answer #1 · answered by Anonymous · 0⤊ 0⤋
import java.io.*;
import java.util.*;
public class TEST
//檔名:TEST.java
{
public static void main(String[] args)
{
PrintStream o=new PrintStream(System.out);
Scanner in=new Scanner(System.in);
o.printf("e= %.15f\n",Math.E);
o.printf("Input N: ");
double n=in.nextDouble();
o.printf("Input X: ");
double x=in.nextDouble();
o.printf("%.15f\n",exp(n,x));
}
public static double exp(double N, double X)
{
double value=1;
N=Math.floor(N);
for(int i=0;i
value+=Math.pow(X, i+1)/factorial(i+1);
}
return value;
}
public static int factorial(int N)
{
int value=1;
for(int i=0;i
value*=(i+1);
}
return value;
}
}
2007-10-20 20:20:41 · answer #2 · answered by Big_John-tw 7 · 0⤊ 0⤋