An addendum: I should make it clear that the case of stencil values
being equal is quite common, so the Lisp code can be optimized to the
form
(setf (aref entries pos2)
(* 0.1111111111
(+ (aref entries (+ pos2 -1001))
(aref entries (+ pos2 -1))
(aref entries (+ pos2 999))
(aref entries (+ pos2 -1000))
(aref entries (+ pos2 0))
(aref entries (+ pos2 1000))
(aref entries (+ pos2 -999))
(aref entries (+ pos2 1))
(aref entries (+ pos2 1001)))))
Using the full form
(setf (aref entries pos2)
(+ (* 0.1111111111 (aref entries (+ pos2 -1001)))
(* 0.1111111111 (aref entries (+ pos2 -1)))
(* 0.1111111111 (aref entries (+ pos2 999)))
(* 0.1111111111 (aref entries (+ pos2 -1000)))
(* 0.1111111111 (aref entries (+ pos2 0)))
(* 0.1111111111 (aref entries (+ pos2 1000)))
(* 0.1111111111 (aref entries (+ pos2 -999)))
(* 0.1111111111 (aref entries (+ pos2 1)))
(* 0.1111111111 (aref entries (+ pos2 1001)))))
is still faster than C, but not that much (2.67s compared with 4.19s
on my machine).
Yours, Nicolas.