Функция действует по-разному для одного и того же аргумента - PullRequest
0 голосов
/ 11 марта 2019

Название вопроса не очень конкретное, я знаю, но это потому, что я не знаю, что происходит с моей C-программой. Я пытаюсь вычислить sin (x), используя полиномы Тейлора (с радиантом).Сначала я хочу поделиться своим кодом:

#define TAYLOR_MAX 10

double sin(double x){

    int i;
    double sum=0, fact=1, xi=x;

    for(i=1; i<TAYLOR_MAX; i+=2){
        sum += x / fact;
        x *= xi * xi * (-1);
        fact *= i * (i-1);
    }

    return sum;
}

Хорошо, когда я вызываю эту функцию как:

sin(1.0)

Она запускается и выдает правильный ответ: 0.8414709848

Но когда я звоню так:

double p=1.0;
sin(p)

Это дает: -nan

Почему это происходит?Как я могу решить это?Заранее спасибо ..

1 Ответ

1 голос
/ 11 марта 2019

Я тестировал этот код с помощью моего компилятора, и в результате первый вызов sin(1.0) фактически не вызывает вашу реализацию sin(), а вместо этого что-то еще, что возвращает правильный ответ. Второй вызов sin(p) выполняет вашу функцию sin(), которая возвращает -nan, так что, похоже, она не работает.

Попробуйте переименовать вашу функцию sin() во что-то другое, и вы должны это увидеть.

...