@pinkhead_psd

Как написать функцию sin из библиотеки math.h в Си?

Нужно реализовать функцию sin() из библиотеки math.h. Я сделал через ряд Тейлора, но получаю результат в градусов, а нужно радианы как в оригинале. Может я сути не улавливаю. Например sin(30) = 0.5, а в оригинальной функции получается sin(30) = -0.988032
Сам код:
long double s21_sin(double angle) {
    double sum = angle;
    double sum2;
    int sign = 1;
    for (int i = 9; i > 0; i -= 2) {
        double term = sign * power(angle, i) / factorial(i);
        sum += term;
        sum2 += term;
        sign *= -1;
    }
    return sum2;
}

int main() {
    double angle = 30.0; 
    long double result = s21_sin(angle*PI/180);

    printf("Синус угла %.2f радиан равен %Lf\n", angle, result);
    printf("Оригинальная sin с переводом в градусы: %f\n",sin(30.0*3.14159265/180));
    printf("Оригинальная sin чистый вывод: %f",sin(30.0));

    return 0;
}


Результат работы:
Синус угла 30.00 радиан равен 0.500000
Оригинальная sin с переводом в градусы: 0.500000
Оригинальная sin чистый вывод: -0.988032
  • Вопрос задан
  • 569 просмотров
Пригласить эксперта
Ответы на вопрос 2
@res2001
Developer, ex-admin
У вас sum2 не инициализируется в начале, а в цикле вы туда уже чего-то прибавляете.
Как думаете какой результат будет возвращен функцией? Зависит от того что лежало на стеке где теперь лежит sum2, а лежать там может все что угодно.
Ответ написан
Комментировать
wataru
@wataru Куратор тега Математика
Разработчик на С++, экс-олимпиадник.
Все у вас правильно написано, вы запутались.

Ваша функция, как и стандартная, работает с радианами и выдает такой же результат от того же аргумента Pi*30/180=Pi/6.

Посмотрите, ведь в result и во второй строке вывода вы передаете один и тот же агумент и получаете один итот же 0.500000. Только во второй строке у вас вместо Pi написано 3.1415265.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы