Risultato sbagliato per metodo di bisezione

di il
1 risposte

Risultato sbagliato per metodo di bisezione

#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?

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte