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.

Reply via email to