(defun eulsum (sum term jterm wksp) (declare (type double-float sum)) (declare (type double-float term)) (declare (type fixnum jterm)) (declare (type (simple-array double-float (*)) wksp)) (prog ((dum 0.0d0) (j 0) (tmp 0.0d0) (nterm 0)) (declare (type double-float dum)) (declare (type fixnum j)) (declare (type double-float tmp)) (declare (type fixnum nterm)) (cond ((= jterm 1) (setf nterm 1) (fset (fref wksp 1) term) (setf sum (* 0.5 term)) ) (t (setf tmp (fref wksp 1)) (fset (fref wksp 1) term) (fdo ((j 1 (+ j 1))) ((> j nterm) nil) (tagbody (setf dum (fref wksp (+ j 1))) (fset (fref wksp (+ j 1)) (* 0.5 (+ (fref wksp j) tmp))) (setf tmp dum) )) (cond ((<= (abs (fref wksp (+ nterm 1))) (abs (fref wksp nterm))) (setf sum (+ sum (* 0.5 (fref wksp (+ nterm 1))))) (setf nterm (+ nterm 1)) ) (t (setf sum (+ sum (fref wksp (+ nterm 1))))) ))) (return (values sum term jterm wksp)) ))