[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: infinities reformulated



 | Date: Sun, 19 Jun 2005 10:19:29 -0700 (PDT)
 | From: bear <bear@xxxxxxxxx>
 | 
 | On Thu, 16 Jun 2005, Aubrey Jaffer wrote:
 | 
 | > Can you give an example of a calculation where you expect
 | > that choosing a reduced precision will reap a large
 | > benefit?
 | 
 | Reduction in precision beyond the level of a small float
 | size supported by the hardware is rarely useful, even when
 | performing binary tricks, but:
 | 
 | It often happens in neural networks (read: my day job) that
 | being able to store a bunch of floats compactly (level-2
 | cache size) results in dramatic speedups, and in such cases
 | (in C) I use arrays of 32-bit floats rather than 64-bit
 | doubles.

Implementations supporting SRFI-47 or SRFI-63 can provide arrays of
32-bit floats.

 | Since R5RS strongly recommends "precision equal to
 | or greater than the most precise flonum format supported by
 | the hardware," and further because in scheme I can't in
 | general rely on a particular hardware representation without
 | indirections, tag bits, and other encapsulating structures
 | which will blow the cache, I can't really do this in R5RS
 | scheme.

That is why SRFI-47 (and SRFI-63) was created.  A homogeneous array
can be stored as a contiguous block which has just one tag identifying
its type.  SCM and SLIB/Guile do this.

 | I can do it using implementation- specific extensions in Chicken
 | and Bigloo, and I can do it in Stalin, another Lisp-1 dialect
 | that's largely similar to scheme.

You could also do it with SCM or SLIB/Guile (using SRFI-47 or
SRFI-63).

 | But a couple of years ago, I had a (toy) project where I was
 | simulating orbits several centuries into the future in a
 | game where the objective was to get a hypothetical
 | spacecraft from L3/Earth to pluto using only 100 m/s of
 | delta-vee plus orbital mechanics.  And in that project,
 | having 512-bit precise reals (thanks to Chicken which
 | allowed itself to be recompiled with alternate real
 | precision) was *NECESSARY*, since even with scaling, using
 | "doubles" would have lost crucial information in the
 | underflow.  Of course, it took a long long time to find a
 | good solution, but search strategies for a good solution
 | were what the game was about.

Would weakening the "most precise" requirement to a recommendation
improve Scheme as a platform for such arithmetics?