Buongiorno a tutti,
oggi mi sono messo lì e ho provato in questo modo, solo che il risultato che ottengo non è corretto (come mi da la calcolatrice), infatti tan(10) dovrebbe essere = a 0,1763...
Con il programma ottengo un altro risultato.
Qui di seguito il programma, se qualcuno può darci un 'occhiata e dirmi dove sbaglio ...
#include <stdio.h>
#include <math.h>
float coseno(float,float);
float seno(float,float);
int main()
{
float ang,rad,acc,tan;
ang=10;
rad=((ang*3.141592)/180);
acc=4;
tan=(seno(rad,acc)/coseno(rad,acc));
printf("Programma per il calcolo della tangente di 10 gradi sessagesimali\n");
printf("mediante sviluppo in serie di Taylor\n");
printf("la tangente di 10 vale %f\n",tan);
system("PAUSE");
return 0;
}
float coseno(float rad, float acc)
{
float prev, curr, x;
int nfatt=1, sign=1;
int n, nmax=70;
prev = 1;
x = 1;
for (n=1; n<nmax; n++) {
nfatt = nfatt*(2*n)*(2*n-1);
sign = sign*(-1);
x = x*rad*rad;
curr = prev + (sign*x)/nfatt;
if ( fabs(prev - curr) < fabs(acc) ) return curr;
prev = curr;
}
printf("Numero massimo di cicli superato\n");
return curr;
}
float seno(float rad, float acc)
{
float pre, cur, y, z;
int fatt=1, segn=1;
int m, ntot=70;
pre = 1;
y=1;
z=1;
for (m=1; m<ntot; m++) {
fatt = fatt*(2*m+1)*(2*m);
segn = segn*(-1);
y=y*rad*rad;
z=y*rad;
cur = pre + (segn*z)/fatt;
if ( fabs(pre - cur) < fabs(acc) ) return cur;
pre = cur;
}
printf("Numero massimo di cicli superato\n");
return cur;
}