вычисление тригонометрии - как?! как вы это делаете?
собственно вопрос. Я ни разу не программист, но тут что-то наткнулся на одно старое обсуждение тыц и у меня возник вопрос - собственно как это всё происходит.
Интересует сам механизм, достал свой пыльный конспект по матану всю ночь читал, пытался вспомнить, под утро наиндусил на C разложение в ряд Тейлора(в три итерации) и сравнил выхлоп с системной функцией... и вот вопрос таки возник.
Получилось, что на малых углах разбег начинается после второго знака, но уже к 30° он перескакивает на первый и далее только растёт. Оно понятно что я тот ещё индус, но хотелось бы послушать опыт знающих.(glibc я конечно почитаю потом).
конечный результат системного косинуса 10: 0.984808
конечный результат вычисленного косинуса 10: 0.984731
конечный результат системного косинуса 20: 0.939693
конечный результат вычисленного косинуса 20: 0.938460
конечный результат системного косинуса 30: 0.866025
конечный результат вычисленного косинуса 30: 0.859819
сам код :
#include <stdio.h>
#include <math.h>
#define PI 3.14159265
double rezult, deg_0,deg,test;
double factor (double iterration);
double stepen (double deg, double step);
double prom( double st, double faktor);
int main()
{
printf ("введите значение: ");
scanf("%lf", °_0);
deg=deg_0*(PI/180);
printf(" \n");
printf("Processing... \n");
double q;
q=2;
double promt;
promt=prom(deg,q);
q=q+2;
promt=promt+prom(deg,q);
q=q+2;
promt=promt-prom(deg,q);
q=q+2;
promt=promt+prom(deg,q);
rezult=1-promt;
test=cos(deg);
printf("конечный результат системного косинуса %10f: %10f\n",deg_0, test);
printf("конечный результат вычисленного косинуса %10f: %10f\n",deg_0, rezult);
return 0;
}
double factor (double iterration)
{
if(iterration < 0)
return 0;
if (iterration == 0)
return 1;
else
return (iterration < 2) ? 1 : iterration * factor(iterration - 1);
}
double stepen (double deg, double step)
{
if(step < 0) step = -step;
if(step == 0) step = 1;
double result = 1;
for (double i = 0; i < step; i++) {
result *= deg;
}
return result;
}
double prom(double st, double faktor)
{
double znachenie;
double i,j;
i=stepen(st,faktor);
j=factor(faktor);
znachenie=i/j;
return znachenie;
}
Короче кто как это решает?
PS. интересует именно голый алгоритм,за системные инструменты glibc я в курсе.