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