Проблема с интегралами

При решении задачи по написанию алгоритма вычисления интегралов методом Симпсона столкнулся со следующей проблемой: при вычислении программа выдает значение с некоторой погрешностью. Например, программа выдает одно число, а при проверке его на различных сайтах по интегрированию получается другое, хоть и незначительно, но меньшее. В чем может быть проблема: в самом алгоритме, или же это действительно погрешность?

Код метода:

public delegate double Func (double x);
public static double Function1 (double x)
{
    return 20/(10+2*x*x);
}
public static double Simpsons (double a, double b, int N, double h, Func Y)
{
    double q = 0;
    double q1 = a + h;
    for (int i = 1; i < N; i+=2) {
        q = q + 4 * Y(q1);
        q1 = q1 + h;
        q = q + 2 * Y(q1);
        q1 = q1 + h;
    }
    q = h/3*(q+Y(a) - Y(b));
    return q;
}

Код основной программы:

double a = 0;
double b = 1;
double N = 40;

double h = (b-a)/N;
double S2 = Class1.Simpsons(a,b,N,h,Class1.Function1);

Console.WriteLine(S2.ToString("0.0000000000"));
Console.ReadKey();

Вывод программы: 1,8806867227

Вывод сайтов: 1.8806867212

P.S. Пробовал поменять количество итераций - значение либо все равно больше, либо меньше, но никак не совпадает.


Ответы (1 шт):

Автор решения: Иван

Действительно, проблема оказалась лишь в погрешностях. Связанно это с принципом работы компьютера с длинными числами и их переводом в двоичную систему. Поэтому небольшие погрешности - нормальное явление.

→ Ссылка