NextPrevUpTopContentsIndex

10.6.3 Floating point optimization

The float declaration allows generation of more efficient code using float numbers. It reduces allocation during float calculations. It is best used with safety 0. That is, you declare (optimize (float 0) (safety 0)) as in this example:

(progn
  (setf a 
        (make-array 1000 
                    :initial-element 1D0
                    :element-type 'double-float))
  nil ; to avoid printing the large array
  )
 
(compile 
 (defun test (a)
   (declare (optimize (speed 3) (safety 0) (float 0)))
   (declare (type (simple-array double-float  (1000))
                  a))
   (let ((sum 0D0))
     (declare (type double-float sum))
     (dotimes (i 1000)
       (incf sum (the double-float (aref a i))))
     sum)))
 
(time (test a))
=>
Timing the evaluation of (TEST A)
 
user time    =      0.000
system time  =      0.000
Elapsed time =   0:00:00
Allocation   = 16 bytes standard / 0 bytes conses
0 Page faults

Note: calls to + , - and * with more than 4 arguments will not be optimized, even with the declaration described above, so avoid such calls to obtain the best floating point performance


LispWorks User Guide - 11 Mar 2008

NextPrevUpTopContentsIndex