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

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?
*
Yes.
>* 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.
*>* >
*>* >
*>* >
*