Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
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*/;