NaN is a value that is returned to indicate that an operation could not be performed in the way that is normally expected. How is that not pretty much the definition of an error return?<p>Propagating an error return through subsequent computations is just monadic error handling ... which is, well, error handling?<p>Also, of course, there are NaN checks everywhere, as is evidenced by the error propagation. You can&#x27;t propagate the sentinel value if you don&#x27;t check for it. It just so happens that this check usually is implemented in hardware as part of every instruction for IEEE 754 numbers, so it&#x27;s extremely fast in the error-free case and doesn&#x27;t cause any code bloat, at the cost of some cycles being spent on otherwise useless error propagation in case an error occurs.<p>Now, what you are saying isn&#x27;t exactly wrong--but I think it&#x27;s much less confusing to think of it in this way.