Java求自然對數底e的值
阿新 • • 發佈:2018-12-19
編寫一個java程式jse.java,按下面的公式計算自然對數底e的值(n的值取20):e=1+ 1/1!+1/2!+1/3!+1/4!+…1/n!
直接看程式碼吧。2個方法,第一個很好理解,第二個我沒看懂,又是演算法的能量展示。
[java] view plain copy print?- /**
- * 自然對數的底e的計算。<br>
- * 1+1/1! + 1/2! + 1/3! + ...<br>
- *
- * @author 老紫竹研究室(laozizhu.com)
- */
- publicclass Test {
- publicstaticvoid main(String args[]) throws
- // 方法1
- double e = 1.0;
- double t = 1.0;
- for (int i = 1; i <= 20; i++) {
- t /= i;
- e += t;
- }
- System.out.println(e);
- // 方法2,可惜我沒看懂,很精妙
- e = 0.0;
- for (int i = 20; i > 0; i--) {
- e = (e + 1.0) / i;
- }
- e++;
- System.out.println(e);
- }
- }
執行結果
2.71828182845904552.718281828459045
感謝網友提供的第二種方法的解釋,我們來看看
寫成連分式(下面寫前幾項) 1---- + 1 20------------ + 1 19-------------------- + 1 18-------------------------------- + 1 17開啟後正是1/1! + 1/2! + 1/3!+...+1/20!
一開始是
1/20
然後是
(1/20+1)/19 = 1/20/19 + 1/19
然乎是
(1/20/19 + 1/19)/18 = 1/20/19/18 + 1/19/18 + 1/18
。。。
最後就變成了
1/20/19/18/。。。/1 + 1/19/18/17/.... + 。。。
==》
1/20! + 1/19! + 1/18! .....
果然精妙。
當然,乘法和除法次數和我的第一個演算法一樣,所以效率上並沒有優勢。