#include <stdio.h>
#include <math.h>
double f(const double x){
return pow(x, 1/3) + (3 * x) - 5;
}
int main(){
const int PRECISION = 15;
const long double EPS = pow(10, -PRECISION);
const int MAX_ITERATIONS = 100000;
double a = -10, b = 10, c;
if(f(a) * f(b) < 0){
printf("There is a solution for the given interval\n");
}
else{
//Ipotetic change of a and b
}
for(int i = 0; i < MAX_ITERATIONS && fabs(a - b) >= EPS; i++){
c = (a + b) / 2;
if(f(c) == 0){
break;
}
else if(f(c) < 0){
a = c;
}
else{
b = c;
}
}
printf("Solution: %lf", c);
return 0;
}
Devo calcolare il valore della funzione “pow(x, 1/3) + 3x - 5” nell'intervallo [-10; 10].
Il programma ritorna 1.33333, ma ho provato a verificare su GeoGebra ed esce una soluzione un po' diveversa: 1.,3026243962309.
Il programma è corretto ed è soltanto un errore di macchina o si può fare qualcosa per migliorarne la precisione?