使用Maclaurin扩展进行Sin近似

时间:2017-03-07 14:24:31

标签: java performance taylor-series

我试图编写自己的代码来计算rad角的近似值。到目前为止,我的工作只针对特定范围的数字,但对于像500这样的大型数字而言却失败了。 额外的子问题:哪个更有效 - 通过Math.pow()或当前的方式计算功效 - 只有乘法运算符。

private static double sin_range(double rad) {
    double sin_rad = rad;

    while (sin_rad > 2 * Math.PI) {
        sin_rad -= 2 * Math.PI;
    }
    return sin_rad;
}

private static double approx(double rad, int err) {
    double rad_in_range = sin_range(rad);
    double sin = rad_in_range, r = rad_in_range;
    int previous = 1, factorial = 1;

    for (int i = 0; i < err; i++) {

        factorial = (factorial * (previous + 1) * (previous + 2));
        r *= rad * rad;
        if ((i & 1) == 0) { //even
            sin -= r / factorial;
        } else { //odd
            sin += r / factorial;
        }
        previous += 2;
    }

    return sin;
}

public static void main(String[] args) {
    double approximated = approx(15, 5);
    System.out.println(approximated + " = " + Math.sin(15));
}

0 个答案:

没有答案