#include<iostream>
#include<cmath>
using namespace std;
int e=0.001;
double yk(int k,double x){
if(k==0) return 1;
return 0.5*(yk(k-1,x) + x/yk(k-1,x));
}
double square(double x,int k)
{
if(fabs(yk(k,x)*yk(k,x) - x)<e) return yk;
return square(x,k+1);
}
int main()
{
cout<<yk(5,2);
return 0;
}
Мне нужно вычислить квадратный корень числа с формулой Ньютона, которая вычисляет y [k] до fabs (y [k] * y [k] -x)> e (небольшое число, например, 0,0001);
Поэтому, если sqrt (2) = 1.41421356237 и e = 0.0001, моя функция должна вернуться к 1.4142.
..Это программа, которую я написал .. Я знаю, что она глючит, поэтому я буду очень благодарен, если sb поможет мне :)))
Переменная e должна быть float или double.
Ошибка, которую вы получаете не из-за функции fabs, а из-за того, что вы пытаетесь вернуть указатель на функцию yk, а квадрат возвращает двойной
#include <iostream>
#include <cmath>
using namespace std;
double e=0.001;
double yk(int k,double x){
if(k==0) return 1;
return 0.5*(yk(k-1,x) + x/yk(k-1,x));
}
double square(double x,int k)
{
double res = yk(k, x);
if (fabs(res*res - x) < e) return res;
return square(x,k+1);
}
int main()
{
cout << yk(5,2); // Actually you don't call square....
// it works even if you do square(2, 5), this way you get the root of two
// doing at least 5 iterations, and if it is not enough (error > e) the
// computer goes on until it gets an error < e
return 0;
}