Subject: Re: Q: (LispWorks) speed issue
From: Erik Naggum <erik@naggum.net>
Date: Wed, 13 Mar 2002 18:12:42 GMT
Newsgroups: comp.lang.lisp
Message-ID: <3225031973116929@naggum.net>

* Nicolas Neuss
| An even simpler possibility is to use floating point operations for
| semi-long integers.  Try the following:
| 
| (defun tt (nn)
|   (declare (optimize (speed 3) (safety 0)))
|   (loop for k of-type double-float below (float nn 1.0d0) do
| 	nil))
| 
| (time (tt 100000000))

  Very good advice, only make sure that k and (1- k) are different, i.e.,
  that you use fewer bits than the precision of the floating point format.
  (float-precision 1d0) returns that number.

  Of course, this works best when double-floats are not passed around,
  otherwise, they need to be boxed and cons like mad.  It _should_ have
  been equally efficient with bignums, methinks.  Oh, well.

///
-- 
  In a fight against something, the fight has value, victory has none.
  In a fight for something, the fight is a loss, victory merely relief.