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
codice:
cout<<"c vale"<<c;
prima del comando return c; il valore è giusto ma appena entro nella funzione main il programma stampa sempre la stringa 1.#QNAN.
codice:
#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;
}
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 ritorna