Ciao!!!!!!!
Ho fatto questo codice per fare un programma che approssimi la funzione cos(x)con il polinomio di taylor. Solo che non riesco a far tornare il valore esatto del cos(x) dopo il ciclo. Mi sapete dire dove sbaglio?
Codice sorgente - presumibilmente C
/*Scrivere un programma C++ che realizza un'approssimazione polinomiale (facendo uso del polinomio di Taylor con x0=0) della funzione
cos(x) che sia accurata entro la tolleranza epsilon acquisita da tastiera.
Considerare per il criterio di arresto il modulo dell'errore assoluto.*/
#include <stdio.h>
#include<stdlib.h>
#include <math.h>
double power(double,int);
double fattoriale (double,int);
main()
{
float x/*angolo in radianti da inserire*/, eps/*tolleranza*/, app=1/*risultato approssimato*/;
per iniziare, converti app, eps e x in double, anzichè in float.
Se fai alcuni calcoli in double e poi memorizzi i risultati in float ottieni degli errori per troncamento di una consistente parte della mantissa (i double sono 64bit, di cui 52 di mantissa, mentre i float sono 32bit di cui mi pare solo 23 di mantissa).
Se questa correzione non fosse sufficiente proverò a debuggare il tuo codice, tempo permettendo.
Ciao
Ultima modifica effettuata da TheKaneB il 12/01/2010 alle 10:00
Ciao Puffetta!
Ho letto il tuo programma, e ho trovato alcuni piccoli errori.
Es.:
- La variabile app va inizializzata a zero.
- Per il calcolo della serie, va utilizzata questa formula:
app+=sign*(power(x, n)/ fattoriale(n));
- ecc.
Ecco quì il programma corretto:
Codice sorgente - presumibilmente C
#include <stdio.h>
#include<stdlib.h>
#include <math.h>
#include <conio.h>
double power(double,int);
double fattoriale (int);
main()
{
double x/*angolo in radianti da inserire*/, eps/*tolleranza*/, app=0.0/*risultato approssimato*/;