Witam, zrobiłem program służący do tego co w temacie, ale nie działa on na pewnych danych i nie wiem dlaczego.
Oto kod:
#include <iostream>
#include <vector>
#include <cmath>
double funk(double x)
{return 2*pow(x,2)+3*x-5;
}
using namespace std;
int main ()
{
double ylewa,yprawa,x,p,q,s;
p=-1;
q=2;
int D=0;
ylewa=funk(p);
yprawa=funk(q);
if ((ylewa*yprawa)>0)
{cout<<"NIE"<<endl;
return 0;
}
else
{while ((q-p)>0 || D<100000)
{D++;
s=(p+q)/2;
if(funk(s)==0)
{ cout<<s<<endl;system("pause"); return 0; }
else
if (funk(p)* funk(s)<0) q=s;
else
p=s;
}
}
system("pause");
return 0;
}
program wyszukuje miejsce zerowe wielomianu z podanego zakresu p=-1, q=2.
No i działa, ale kiedy zmieniam wzór funkcji na 2pow(x,3)-pow(x,2)+3x-14 i podaje p=0,q=3. To liczy i liczy, a sprawdzałem nawet i nie wiem dlaczego tak jest, w pętli while zmienna D wzrasta powyżej ograniczenie.
Możliwe, że wielomian nie ma miejsca zerowego, ale niestety nie wiem jak to uwzględnić w kodzie.
Za pomoc z góry dziękuję.