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