<div dir="ltr">On Thu, Dec 12, 2013 at 5:43 PM, Owen Anderson <span dir="ltr"><<a href="mailto:resistor@mac.com" target="_blank">resistor@mac.com</a>></span> wrote:<br>
<div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><br><div><div>On Dec 12, 2013, at 4:57 PM, Philip Reames <<a href="mailto:listmail@philipreames.com" target="_blank">listmail@philipreames.com</a>> wrote:</div>

<br><blockquote type="cite"><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:start;font-style:normal;display:inline!important;font-weight:normal;float:none;line-height:normal;text-transform:none;font-size:12px;white-space:normal;font-family:Helvetica;word-spacing:0px">undef + any == NaN (since undef can be NaN) or undef + any (since undef could be zero)</span></blockquote>

</div><br></div><div>undef + non-NaN is still undef.  The compiler is free to choose any value of the type it wishes when simplifying an undef expression.  The important point is that it still has to be a value <i>of that type.  </i>Hence, predicates that are true for <i>any</i> choice of value must still be respected.  This is the case for NaN + undef == NaN: while the compiler is free to choose any value for the undef, there is no such value for which the result is not NaN.</div>

</div></blockquote><div><br></div><div>undef + non-NaN is not undef. This is because while you can pick any value for the original undef, if you leave an undef behind, you can't control what someone else might pick for it. There are floating-point values which cannot be the result of undef + non-NaN for many values of non-NaN, so the result of undef + non-Nan is not an unconstrained undef.<br>
</div><div><br></div><div>Dan<br><br></div></div></div></div>