Реализация cos в Java без функции Math.cos - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь вычислить косинус без использования функции Math.cos(). Я знаю, как это делается в теории с использованием ряда Тейлора, но я всегда получаю неправильные результаты. Вот мой код:

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
    }

Я был бы очень рад, если бы кто-нибудь мог мне помочь!

1 Ответ

0 голосов
/ 05 ноября 2019

Я думаю, вы неправильно поняли вопрос. 2 * Pi - полный круг, поэтому нет смысла производить вычисления для значений вне диапазона 0 ... 2 * Pi радиан. Вы можете отклонить входные данные вне этого диапазона, но легко взять входное значение mod 2 * Pi и использовать его.

Каждое вычисление косинуса должно преобразовываться из градусов в радианы, а затем запускать цикл серии Тейлора N раз, используяэтот угол в качестве входа «х». Значение N зависит от вас. Больше итераций будет давать более точные результаты, пока вы не достигнете пределов арифметики двойной точности. Человек, который поставил задачу, мог дать инструкции по этому вопросу.

...