Hmm, curiouser and curiouser. Using the latest nightly build from <a href="http://pre.racket-lang.org/installers/">http://pre.racket-lang.org/installers/</a>, I get #f #t #t #f both on my home machine and work machine, which run Windows 7 64-bit. Now I&#39;m really curious as to what&#39;s going on here!<br>
<br><div class="gmail_quote">On Fri, Sep 9, 2011 at 12:08 PM, Vincent St-Amour <span dir="ltr">&lt;<a href="mailto:stamourv@ccs.neu.edu">stamourv@ccs.neu.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
At Thu, 8 Sep 2011 20:43:02 -0400,<br>
<div class="im">Luke Vilnis wrote:<br>
&gt; Running this produces:<br>
&gt;<br>
&gt; eq? 0.0 #f<br>
&gt; eqv? 0.0 #t<br>
&gt; Float? #t<br>
&gt; Float-Or-Integer? #f<br>
<br>
</div>With the latest from git on Debian 32 bit, I get `#t&#39; for all four.<br>
<br>
What environment are you using?<br>
<div class="im"><br>
&gt; The part of TR that generates the compound contracts for unions containing<br>
&gt; Float  types is using eq? instead of eqv? for the 0.0 and -0.0 case (which<br>
&gt; started in version 5.1.1), which explains why the predicate fails. Somehow,<br>
&gt; in the repro above, a 0.0 is being produced that doesn&#39;t eq? with the<br>
&gt; literal 0.0. I tried doing this with, say, (eq? 0.0 (- (+ 3.0 1.0)<br>
&gt; 4.0)) or (eq?<br>
&gt; (exact-&gt;inexact 0) 0.0), but those both evaluate to #t, so either the<br>
&gt; compiler is doing some very clever constant folding here, or eq? is supposed<br>
&gt; to do value equality for floats. I&#39;m assuming the former, but especially for<br>
&gt; the exact-&gt;inexact case that seems pretty darn clever. Anyhow, I was hoping<br>
&gt; someone could confirm my suspicion that this bug was so hard to reproduce<br>
&gt; because of crazy compiler magic (also, assuming this is right and it&#39;s<br>
&gt; simply an eq? vs. eqv? issue, I&#39;ve sent along a patch).<br>
<br>
</div>The patch looks fine. I&#39;ll apply it.<br>
<br>
Thanks!<br>
<font color="#888888"><br>
Vincent<br>
</font></blockquote></div><br>