ho creato questo programma per approssimare le radici della funzione f(x) con il metodo di bisezione, tutto è a posto fino a quando la funzione bisezione deve ritornare c come valore.
con
prima del comando return c; il valore è giusto ma appena entro nella funzione main il programma stampa sempre la stringa 1.#QNAN.codice:cout<<"c vale"<<c;
con una qualsiasi coppia di valori a e b con segno diverso c dovrebbe risultare 0, sto calcolando la soluzione di x=0, e in effetti nella funzione bisezione assume il valore giusto ma poi non lo ritornacodice:#include <iostream> #include <math.h> using namespace std; float f(float x) {return x;} float bisezione(float a,float b, float prec,float lastValue) { float c,diff; c=(a+b)/2; diff=fabs(f(c)-lastValue); if(f(c)==0 || diff<prec) {return c;} if(f(a)*f(c)<0) {bisezione(a,c,prec,f(c));} if(f(b)*f(c)<0) {bisezione(c,b,prec,f(c));} } int main() { float a,b,precisione=1e-6,tmp; cout<<"a"<<endl; cin>>a; cout<<"b"<<endl; cin>>b; if(f(a)*f(b)<0) {if(a>b) {tmp=b; b=a; a=tmp;} cout<<"f(x)=0 in x["<<a<<";"<<b<<"] per x="<<bisezione(a,b,precisione,f(a))<<endl;} else {cout<<"f(a) e f(b) non hanno segno diverso"<<endl;} system("PAUSE"); return 0; }


Rispondi quotando