解答例 - j1.lesson04.MaclaurinExpansion

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 += / 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);
        }
    }
}