type FunctionType = function(x: Single): Single; var fn: LongInt; function f(x: Single): Single; begin f := DATA32[fn]; end; function Integral_Simpson(a, b: Single; f: FunctionType; e: Single): Single; var h, x, s, s1, s2, s3, sign: Single; begin if a = b then begin Integral_Simpson := 0; Exit; end; if a > b then begin x := a; a := b; b := x; sign := -1 end else sign := 1; h := b - a; s := f(a) + f(b); s2 := s; repeat s3 := s2; h := h / 2; s1 := 0; x := a + h; repeat s1 := s1 + 2 * f(x); x := x + 2 * h; until not( x < b ); s := s + s1; s2 := (s + s1) * h / 3; x := abs(s3 - s2) / 15 until not( x > e ); Integral_Simpson := s2 * sign; end;