Witam wszystkich !```
Do wykonania mam zadanie realizujace Efekt Rungego ,dla interpolacji Newtona.
Moj problem polega na wyliczeniu bledu wzglednego(Linijka 67). Za wartosc dokladna przyjmuje wynik funkcji (1/(1+25(x^2)) ,noi po odjeciu i podzieleniu powinno wyjsc 0 ,jednak wynik jest wyswietlny ,jako bardzo zblizony do zera ,w jaki sposob wyswietlic wynik ,tak aby wyswietlany byl jako 0? Poniżej załączam kod programu:
#include<iostream>
#include<conio.h>
#include <cmath>
using namespace std;
double func(double x)
{
return 1/(1+25*(x*x));
}
double interpol(int n)
{
double * f = new double[n];
double * arg = new double[n];
double a;
cout<<"Podaj x do interpolacji";
cin>>a;
double x,dx,xk,xp;
int i,j;
xp=-1;
xk=1;
dx = (xk - xp) / (double)n;
for (i=0; i<n; i++)
{
x = xp + i*dx;
arg[i]=x;
f[i]=func(x);
//cout<<"X: "<< arg[i]<<"|";
//cout<<"Y: "<< f[i]<<endl;
}
double mult;
double sum=0;
for(j=0;j<n-1;j++)
{
for(i=n-1;i>j;i--)
f[i]=(f[i]-f[i-1])/(arg[i]-arg[i-j-1]);
}
for(i=n-1;i>=0;i--)
{
mult=1;
for(j=0;j<i;j++)
mult*=(a-arg[j]);
mult*=f[j];
sum+=mult;
}
cout<<"Wynik interpolacji: "<<sum<< " dla: x= "<<a<<endl;
cout<<"Wynik z funkcji: "<<func(a)<< " dla: x= "<<a<<endl;
double epsilon,blad;
blad=(fabs(func(a)-sum)/func(a))*100;
if(round(blad)==0)
{
blad=nearbyint(blad);
}
cout<< "Blad wzgledny wynosi:" <<blad<<"%"<<endl;
delete [] f;
delete [] arg;
return blad;
}
int main()
{
int i,n;
i=0;
cout<<"Ilosc punktow : ";
cin>>n;
//print(n,xp,xk,dx,arg,f);
interpol(n);
/*
double * blad = new double[n];
for(i=0;i<n;i++)
{
blad[i]=interpol(n);
}
cout<<"Bledy: "<<endl;
for(i=0;i<n;i++)
{
cout<<blad[i]<<endl;
}
delete [] blad;
*/
return 0;
}
cpp
zaraz po ```