Здравствуйте! 
Стоит задача посчитать методом Симпсона интеграл 

.
В нуле я доопределил значение подынтегральной функции до 1 (пролопиталил). 
Формула, по которой делал: 

Вот код на си++: 
Код:
double simp(double lim_a, double lim_b, double h){
    int N = static_cast<int>((lim_b - lim_a)/h);
    double delta = (lim_b - lim_a)/(6*N);
    double result = 0;
    result = (func(lim_a+0.000001) + func(lim_a + h*N) + 1)*delta;
    int i;
    for(i = 2; i <= 2*N-2; i+=2){
        result += func(lim_a + 0.5*h*i)*delta*2;
    }
    for(i = 1; i <= 2*N-1; i+=2){
        result += 4*func(lim_a + 0.5*h*i)*delta;
    }
    return result;
}
 (Понимаю, что можно назвать говнокодом.)
На малых значениях шага 

 погрешность у Симпсона самая маленькая по сравнению с другими методами, как и должно быть. Но преподаватель вводил шаги 0,1 и 0,01 (количество узлов соответственно 10 и 100) и погрешность у метода Симпсона оказывалась самая большая. Сказал, чтоб я разобрался. 
Кроме того, я переделал полностью эту функцию по другой формуле и погрешность получается еще большей на больших и даже малых шагах.
Ткните меня пожалуйста носом, где и что я пропустил в программе матанализа и численных методов. 
Спасибо.