Neither, actually. NaN is a valid value and even its use does not always lead to exceptions. For example, it&#39;s possible (and a deliberate use case) to assign NaN (even signaling NaN), and the IEEE 754 function maxNum(x, y) (here proposed as `maximum`) will return x if x is not NaN and y is NaN.<br><div class="gmail_quote"><div dir="ltr">On Fri, Apr 22, 2016 at 12:19 David Waite via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br></div><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><blockquote type="cite"><div>On Apr 22, 2016, at 8:13 AM, Stephen Canon via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:</div><div><div style="word-wrap:break-word"><div><br><br><blockquote type="cite"><div><div style="word-wrap:break-word"><div><pre style="overflow:auto;font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;font-size:14px;margin-top:0px;margin-bottom:0px;line-height:1.45;padding:16px;background-color:rgb(247,247,247);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;word-wrap:normal;word-break:normal;color:rgb(51,51,51)">  <span style="color:rgb(150,152,150)">/// A signaling NaN (not-a-number).</span>
  <span style="color:rgb(167,29,93)">@warn_unused_result</span>
  <span style="color:rgb(167,29,93)">static</span> <span style="color:rgb(167,29,93)">func</span> signalingNaN: <span style="color:rgb(167,29,93)">Self</span> { <span style="color:rgb(167,29,93)">get</span> }
</pre></div><div><br></div><div>I’m not sure it really makes sense for a Bignum / APFloat type to support such a value. But really I think this is just underspecified. What does it mean, in terms of this protocol and its uses, for a NaN to be signaling? Is it just a specific “color&quot; of NaN, with no semantic requirements other than being distinguishable?</div></div></div></blockquote></div></div></div></blockquote><div><br></div></div></div><div style="word-wrap:break-word"><div>I’m confused in that I haven’t really had exposure to signaling NaNs before, and wasn’t really able to find hints on how they are used. Do math operations create signaling NaNs, or is it an explicitly set value?</div><div><br></div><div>My first expectation was that you would either have overflow operators where a NaN result would immediately raise an exception.</div><div><br></div><div>My second expectation if NaN was a valid value but use created exceptions is that floating point numbers are monadic. Specifically, floating point operations with soft NaN seem similar to optional, while Floats with signaling NaN seem similar to implicitly unwrapped optionals - but without the use of separate types to represent numbers and possibly-not-numbers.</div><div><br></div><div>That said, would use of an attribute on a floating point type, similar to what is planned for IUOs, be appropriate to indicate that the type should be treated as signaling?</div></div><div style="word-wrap:break-word"><div><br></div><div>-DW</div><div> </div></div>_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</blockquote></div>