Ciao a tutti, qualcuno mi può dare delle dritte? Devo trovare il valore della funzione tangente con angolo noto. Ho provato prima a farlo solo per cosx e mi viene:
codice:
#include <stdio.h>
#include <math.h>
float cosine(float, float);
int main()
{
float ang,rad,acc;
ang=10;
rad=((ang*3.141592)/180);
acc=4;
printf("Programma per il calcolo del coseno di un angolo\n");
printf("mediante sviluppo in serie di Taylor\n");
printf("Il coseno di %f vale %f\n",ang,cosine(rad,acc));
#ifdef DEBUG
printf("Per confronto la funzione di libreria fornisce il valore %f\n",
cos(rad));
#endif
system("PAUSE");
return 0;
}
float cosine(float rad, float acc)
{
float previsto, corrente, x;
int nfatt=1, sign=1;
int n, nmax=120;
previsto = 1;
x = 1;
for (n=1; n<nmax; n++)
{
nfatt = nfatt*(2*n)*(2*n-1);
sign = sign*(-1);
x = x*rad*rad;
corrente = previsto + (sign*x)/nfatt;
if ( fabs(previsto - corrente) < fabs(acc) ) return corrente;
previsto = corrente;
}
printf("Numero massimo di cicli superato\n");
return corrente;
}
poi ho provato con senx, ma il risultato non so per quale motivo non viene:
codice:
#include <stdio.h>
#include <math.h>
float senine(float,float);
int main()
{
float ang,rad,acc;
ang=10;
rad=((ang*3.141592)/180);
acc=4;
printf("Programma per il calcolo di sen(10)\n");
printf("con sviluppo in serie di Taylor\n");
printf("il seno di 10 vale %f\n",ang,senine(rad,acc));
#ifdef DEBUG
printf("Per confronto la funzione di libreria fornisce il valore %f\n",
sen(ang));
#endif
system("PAUSE");
return 0;
}
float senine(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;
}
}
per ultimo ho provato a d unirli per ricavare la tangente tramite senx/cosx....ma non so come implementare tan=senx/cosx:
codice:
#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;
}
mi potete aiutare??