Hmm.

Since NaN is neither greater than nor less that anything, it seems the only
correct answer to any
Min,max,clamp involving a NaN is NaN.

-CHB


On Sat, Jul 4, 2020 at 9:15 AM Ben Rudiak-Gould <benrud...@gmail.com> wrote:

> On Fri, Jul 3, 2020 at 5:07 PM Steven D'Aprano <st...@pearwood.info>
> wrote:
> > As I recall, there was some positive support but it ran out of steam
> > because nobody could agree on how to handle NANs even though the
> > IEEE-754 standard tells us how to handle them *wink*
> >
> > See my responses at the time re NANs here:
> >
> > https://mail.python.org/pipermail/python-ideas/2016-August/041439.html
> >
> > https://mail.python.org/pipermail/python-ideas/2016-August/041400.html
> >
> > https://mail.python.org/pipermail/python-ideas/2016-August/041396.html
> >
> > Bottom line is that passing a NAN as the lower or upper bound should
> > treat it as equivalent to "unbounded", that is, equivalent to ±∞.
>
> That's not what the standard says. It's sorta connected to a personal
> opinion of Kahan's expressed in some work-in-progress lecture notes
> that you linked in the last message:
>
>     https://people.eecs.berkeley.edu/~wkahan/ieee754status/IEEE754.PDF
>
> What he says there (on page 9) is
>
> >Some familiar functions have yet to be defined for NaN . For instance
> max{x, y} should deliver the same result as max{y, x} but almost no
> implementations do that when x is NaN . There are good reasons to define
> max{NaN, 5} := max{5, NaN} := 5 though many would disagree.
>
> It's clear that he's not referring to standard behavior here and I'm
> not convinced that even he believes very strongly that min and max
> should behave that way.
>
> NaN means "there may be a correct answer but I don't know what it is."
> For example, evaluating (x**2+3*x+1)/(x+2) at x = -2 yields NaN. The
> correct answer to the problem that yielded this formula is probably
> -1, but because of the way floating point hardware works, it has no
> way of figuring that out. Likewise, the final result of a computation
> involving the square root of a negative real may be well defined, and
> may even be real, but the hardware can't compute it, so it "computes"
> NaN instead.
>
> It's definitely true that if plugging in any finite or infinite number
> whatsoever in place of a NaN will yield the same result, then that
> should be the result when you plug in a NaN. For example, clamp(x,
> NaN, x) should be x for every x (even NaN), and clamp(y, NaN, x) where
> y > x should be a ValueError (or however invalid bounds are treated).
>
> But, e.g., clamp(m, x, M) where m < x could yield any value between m
> and x, or a ValueError, depending on the value of M. So, if M is NaN,
> there is no way to know what the correct answer should be. Therefore
> (in my opinion) it should return NaN.
>
> There's a case for making clamp(m, x, NaN) where m >= x return m
> rather than NaN since there's no other *value* it could be (it could
> be an exception though).
> _______________________________________________
> Python-ideas mailing list -- python-ideas@python.org
> To unsubscribe send an email to python-ideas-le...@python.org
> https://mail.python.org/mailman3/lists/python-ideas.python.org/
> Message archived at
> https://mail.python.org/archives/list/python-ideas@python.org/message/PHH7EYAWJBKJCCMPU4KCROKDC3BYACWD/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
-- 
Christopher Barker, PhD

Python Language Consulting
  - Teaching
  - Scientific Software Development
  - Desktop GUI and Web Development
  - wxPython, numpy, scipy, Cython
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/KWA5SDRF7DQIXVNM2V5Z5YFRVWVEHNYJ/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to