在没有Math.cos函数的Java中实现cos

问题描述 投票:0回答:1

我正在尝试不使用Math.cos()函数来计算余弦。我知道使用taylor系列理论上是如何完成的,但是我总是得到错误的结果。这是我的代码:

public static final double PI = Math.PI;

public int calcFakultaet(int x)
    {
    int sum = 1;
    for (int i = sum; i <= x; i++)
        {
        sum *= i;
        }
    return sum;
    }

public double pow(double x, double y)
    {
    if (y == 0) return 1;

    double erg = x;
    for (int i = 1; i < y; i++)
        {
        erg *= x;
        }
    return erg;
    }

public double toRadians(double x)
    {
    return x * PI / 180;
    }

public double calcCos(double x)
    {
    if (x > (2 * PI)) x = this.toRadians(x);
    double erg = 0.0;
    double tmp = 1.0;
    double sign = -1.0;

    for (int i = 0; i <= 12; i+=2)
        {
        int fak = this.calcFak(i);
        tmp = sign * this.pow(x, i) / fak;
        sign *= -1.0;
        erg += -tmp;
        }

    return erg
    }

如果有人能帮助我,我将非常高兴!

java trigonometry
1个回答
0
投票

我认为您误解了这个问题。 2 * Pi是一个完整的圆,因此对于超出0 ... 2 * Pi弧度范围的值进行计算是没有意义的。您可以拒绝超出此范围的输入,但是很容易将输入值mod 2 * Pi用作该值。

每个余弦计算应将度数转换为弧度,然后使用该角度作为输入'x',运行泰勒级数循环N次。 N的值取决于您。更多迭代将产生更准确的结果,直到达到双精度算术的极限。设置任务的人可能已对此进行了说明。

© www.soinside.com 2019 - 2024. All rights reserved.