On Thu, Oct 14, 2010 at 4:18 PM, David Hansel <span dir="ltr">&lt;<a href="mailto:hansel@reactive-systems.com">hansel@reactive-systems.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
For example:<br>
<br>
(1E308 * 10.0) / 10.0 = 1E308 when compiled as 32-bit<br>
(1E308 * 10.0) / 10.0 = inf   when compiled as 64-bit<br></blockquote><div> <br>This is documented in the man page. 32-bit MLton uses (by default) the FPU and 64-bit uses SSE registers. This means that 32-bit MLton has slightly higher intermediate precision than a &quot;normal&quot; IEEE 754 point registers, but performs nicely. You can override this behaviour with &quot;-ieee-fp true&quot; which will force MLton to lose this precision for intermediate calculations. <br>
<br>Note: on i386, the results can also differ depending on when the compiler can no longer fit the intermediate floating point values in the FPU registers. YMMV.<br><br>If you care to know the precision MLton is using for a given platform, check regression/real-basic.sml You&#39;ll see that MLton behaves the same on every supported architecture except i386. (but don&#39;t depend on this!)<br>
</div></div>