Miałem do napisania program obliczajaćy całke metodą złożonej kwadratury simpsona.
Zrobiłem wszystko dobrze i przychodzi do odpowiedzi.... I ja twierdze że mój program sumuje całki wyliczone z tych podprzedziałów dopóki nie osiagnie sie odpowiedniej ,podanej przez uzytkownika dokładkości. Jakie jest wasze zdanie?

oczywiscie
a - poczatek przedzialu
b - koniec przedzialu
funkcja - parserowanie na double stringa
dokladnosc - zmienna podana przez uzytkownika potrzebna do otrzymania porzadanego wyniku.

 
double funkcja (double x, string wzor)
{
    FunctionParser funkcja_sparserowana;
    funkcja_sparserowana.Parse(wzor, "x");// podajemy stringa i nazwe zmiennej do ktorej mamy zaladowac wynik
    double x1=x;
    double wynik=funkcja_sparserowana.Eval(&x1);
    return wynik;
}
double simpson(double a, double b, int ilosc_podzialow, string wzor)
{   double x;
    double dx=(b-a)/ilosc_podzialow;
    double suma=0,wynik=0;

             for(int i=1; i <= ilosc_podzialow; i++)
    {
        x=a+i*dx;// http://pl.wikipedia.org/wiki/Ca%C5%82kowanie_numeryczne#Metoda_parabol_.28Simpsona.29
        suma+=funkcja((x-dx/2),wzor); // to samo

        if(i<ilosc_podzialow)
        {
            wynik+=funkcja(x,wzor);
        }

    }
            wynik=(dx/6)*( funkcja(a,wzor) + funkcja(b,wzor) + 2*wynik+4*suma) ;// 82 strona Foprtuna
return wynik;
}

double wylicz_simps(double a , double b, int &licznik, double dokladnosc, string wzor)
{
    licznik=1;
double wynik1,wynik2;
bool warunek=false;
int ilosc_podzialow =1;
wynik1=simpson(a,b,ilosc_podzialow,wzor);

        while(!warunek)
            {
            ilosc_podzialow++;
            wynik2=simpson(a,b,ilosc_podzialow,wzor);
            licznik++; // zmienna podajaca ile bylo iteracji
                if(fabs(wynik1-wynik2)<dokladnosc) //warunek ze jezeli doszlismy do odpowiedniej dokladnosci przestajemy liczyc
                {
                warunek=true;
                }
                else
                {
                    wynik1=wynik2;
                }
            }
        return wynik2;
}