Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h> // подключаем к компилятору библиотеку stdio.h;
- #include <cmath> // подключаем к компилятору библиотеку math.h;
- #define EPS 1e-10 // задаём точность результата 1*10^(-10)
- using namespace std;
- double f(double x) { // задаём вызываемой функции и аргументу - тип двойной точности;
- return exp(x) - 2 - x; // задаём описание функции f(x);
- }
- int main ( ) { // главная часть программы;
- double xl = 0, xr = 2, xm, xd, signfxl, signfxm; // задаём переменным тип двойной длины и начальные значения;
- int n = 0; // задаём переменной тип целая и начальное значение;
- xd = xr - xl; // вычисляем длину отрезка;
- while ( abs(f(xl))>EPS || abs(f(xr))>EPS ) { // пока абсолютные значения функции больше заданной точности делаем;
- n = n + 1; // прибавляем 1 в счётчик числа проходов (делений на 2, итераций);
- xd = xd / 2; // вычисляем длину новых отрезков;
- xm = xl + xd; // вычисляем значение x в середине отрезка;
- signfxl = copysign(1, f(xl)); // придаём единице знак f(xl); '''copysign is undefined!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!;'''
- signfxm = copysign(1, f(xm)); // придаём единице знак f(xm); '''copysign is undefined!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!;'''
- if ( signfxl != signfxm ) // узнаём, находится ли искомое приближение к корню в левой части;
- xr = xm; // берём левую часть;
- else // иначе искомое приближение к корню находится в правой части;
- xl = xm; // берём правую часть;
- }
- printf ("Value of function: %.10lf\n", f(xm)); // выводим значение функции вблизи корня
- printf ("Left bound equal: %.10lf\n", xl ); // выводим xl
- printf ("Middle of line segment: %.10lf\n", (xl + xr) / 2); // выводим приближение к корню
- printf ("Right bound equal: %.10lf\n", xr ); // выводим xr
- printf ("Numbers of iterations equal: %10i\n", n ); // выводим число проходов (делений на 2, итераций) n
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement