I added real-&gt;float in the math functions in the science collection that I&#39;ll call.<br><br>;;; (real-&gt;float x) -&gt; inexact-real?<br>;;;   x : real?<br>;;; Returns an inexact real (i.e., a float) given real x. Raises an error if x<br>
;;; is not a real. This can be used to ensure a real value is a float, even in<br>;;; unsafe code.<br>(define (real-&gt;float x)<br>  (if (real? x)<br>      (exact-&gt;inexact x)<br>      (error &quot;expected real, given&quot; x)))<br>
<br>I&#39;ll use it to protect unsafe code. I&#39;m sure it&#39;s more overhead than putting it in-line, but hopefully not too much. Putting a contract on it would probably not make much sense.<br><br><div class="gmail_quote">
On Sun, Oct 4, 2009 at 4:27 PM, Matthew Flatt <span dir="ltr">&lt;<a href="mailto:mflatt@cs.utah.edu">mflatt@cs.utah.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="im">At Sun, 4 Oct 2009 14:46:48 -0400, Doug Williams wrote:<br>
&gt; When you use mutable data structures, you live with the choice. For the<br>
&gt; statistics routines, I use exact-&gt;inexact inside the loop at the point where<br>
&gt; I use the value, so I&#39;m not worried about it. Off the top of my head, the<br>
&gt; only problem I see is that exact-&gt;inexact also works on complex numbers, so<br>
&gt; I may still not have a simple float.<br>
<br>
</div>Right. You&#39;d need a `real?&#39; or (after conversion) `inexact-real?&#39; test.<br>
<br>
In the `mean-and-variance&#39; example, I changed `(exact-&gt;inexact x)&#39; in<br>
the loop to `(if (real? x) (exact-&gt;inexact x) 0.0)&#39;. The overhead of<br>
the test was just 1 msec out of 90 msec, so that&#39;s probably a good<br>
option for preserving safety.<br>
<div class="im"><br>
&gt; I assume +inf.0, -inf.0, and +nan.0<br>
&gt; (and, therefore, -nan.0) also pass through exact-&gt;inexact. I further assume<br>
&gt; those are stored as floats (in an IEEE format) and work as expected - at<br>
&gt; least they seem to in the REPL. Is that a correct assumption?<br>
<br>
</div>Yes.<br>
<div class="im"><br>
&gt; Are there<br>
&gt; other cases where exact-&gt;inexact does not give me a float?<br>
<br>
</div>No, the only issue is complex numbers.<br>
<div><div></div><div class="h5"><br>
&gt; On Sun, Oct 4, 2009 at 12:53 PM, Matthew Flatt &lt;<a href="mailto:mflatt@cs.utah.edu">mflatt@cs.utah.edu</a>&gt; wrote:<br>
&gt;<br>
&gt; &gt; At Sat, 3 Oct 2009 08:34:03 -0600, Matthew Flatt wrote:<br>
&gt; &gt; &gt; (while the contract on the &quot;checked&quot; version ensures that the unsafe<br>
&gt; &gt; &gt; operations will not cause a crash).<br>
&gt; &gt;<br>
&gt; &gt; Not true. Sam points out that a vector (or other sequence) can be<br>
&gt; &gt; mutable, so checking elements at the beginning does not make `variance&#39;<br>
&gt; &gt; safe if it uses unsafe operations on the elements internally.<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
</div></div></blockquote></div><br>