package j1.lesson04;
/**
* 課題0404 - 解答例.
* @author s.arakawa
* @version $Id: MaclaurinExpansion_java.rps,v 1.1 2006/03/06 12:56:15 java2005 Exp $
*/
public class MaclaurinExpansion {
/**
* 自然対数の底eの近似をマクローリン展開によって求めるプログラム。
* @param args 無視される
*/
public static void main(String[] args) {
// 課題0403の解答例を読んでいるものとしてコメントを書いている
// n: 繰り返し回数
int n = 1000;
// x: 式全体の結果を保存
double x = 0.0;
// まず、式をΣの形に変形する
// Σ{i=0,...,n-1}(1 / i!)
for (int i = 0; i < n; i++) {
// factorial: i! (あまりよい計算方法ではない)
double factorial = 1.0;
for (int j = i; j >= 1; j--) {
factorial *= j;
}
x += 1 / factorial;
}
// 計算によって求めたeを出力
System.out.println("x = " + x);
// e: eの理論値
double e = Math.E;
// eの理論値を出力
System.out.println("e = " + e);
// epsilon: 相対誤差 (数式にあわせる)
double epsilon = Math.abs(e - x) / e;
// relativeError: 相対誤差 (パーセント法で表す)
double relativeError = epsilon * 100;
// 課題より、相対誤差が1%未満であることを確認しておく
if (relativeError < 1) {
System.out.println("誤差は1%未満:" + relativeError);
}
// 1%未満でない場合はその旨を表示しておく
else {
System.out.println("許容されない誤差:" + relativeError);
}
}
}
|