[plt-dev] `unsafe-fl' and unboxing

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Sun Oct 4 16:27:40 EDT 2009

At Sun, 4 Oct 2009 14:46:48 -0400, Doug Williams wrote:
> When you use mutable data structures, you live with the choice. For the
> statistics routines, I use exact->inexact inside the loop at the point where
> I use the value, so I'm not worried about it. Off the top of my head, the
> only problem I see is that exact->inexact also works on complex numbers, so
> I may still not have a simple float.

Right. You'd need a `real?' or (after conversion) `inexact-real?' test.

In the `mean-and-variance' example, I changed `(exact->inexact x)' in
the loop to `(if (real? x) (exact->inexact x) 0.0)'. The overhead of
the test was just 1 msec out of 90 msec, so that's probably a good
option for preserving safety.

> I assume +inf.0, -inf.0, and +nan.0
> (and, therefore, -nan.0) also pass through exact->inexact. I further assume
> those are stored as floats (in an IEEE format) and work as expected - at
> least they seem to in the REPL. Is that a correct assumption? 


> Are there
> other cases where exact->inexact does not give me a float?

No, the only issue is complex numbers.

> On Sun, Oct 4, 2009 at 12:53 PM, Matthew Flatt <mflatt at cs.utah.edu> wrote:
> > At Sat, 3 Oct 2009 08:34:03 -0600, Matthew Flatt wrote:
> > > (while the contract on the "checked" version ensures that the unsafe
> > > operations will not cause a crash).
> >
> > Not true. Sam points out that a vector (or other sequence) can be
> > mutable, so checking elements at the beginning does not make `variance'
> > safe if it uses unsafe operations on the elements internally.
> >
> >
> >

Posted on the dev mailing list.