Floats, the true ieee next generation Re: Add Ord Laws to next Haskell Report

Carter Schonwald carter.schonwald at gmail.com
Mon Feb 11 18:03:01 UTC 2019


Hey Ganesh,
because of how float stuff works, the code generated will be the same
either way.

On Sun, Feb 10, 2019 at 4:17 PM Ganesh Sittampalam <ganesh at earth.li> wrote:

> Wouldn't having both quiet and signalling NaN types imply wrapping all
> the primitive operations for one or other type in a CPU state switch?
> Maybe the compiler could then optimise some away.
>
> On 08/02/2019 19:07, Lennart Augustsson wrote:
> > I would *hate* to lose quiet NaNs.  They can be very useful.  But I’d be
> > fine having them as a separate type.
> >
> > And while we’re at it, why not make Int overflow and underflow cause a
> > trap as well?  With a different type if you want to wrap.
> >
> >
> > On Fri, Feb 8, 2019 at 08:34 Carter Schonwald
> > <carter.schonwald at gmail.com <mailto:carter.schonwald at gmail.com>> wrote:
> >
> >     Thanks for eloquently summarizing , better than I would , what I
> >     thought I had laid out.
> >
> >     Ieee floating point has fantastic hardware support .  May as well be
> >     the first real language to actually use it correctly. :)
> >
> >     On Fri, Feb 8, 2019 at 5:21 AM Merijn Verstraaten
> >     <merijn at inconsistent.nl <mailto:merijn at inconsistent.nl>> wrote:
> >
> >
> >
> >         > On 8 Feb 2019, at 10:57, Sven Panne <svenpanne at gmail.com
> >         <mailto:svenpanne at gmail.com>> wrote:
> >         >
> >         > Am Do., 7. Feb. 2019 um 23:31 Uhr schrieb Merijn Verstraaten
> >         <merijn at inconsistent.nl <mailto:merijn at inconsistent.nl>>:
> >         > Our goal is to make "compare NaN n" impossible to happen. [...]
> >         >
> >         > Well, what is supposed to happen then when you *do* see a NaN,
> >         e.g. one produced from a foreign call? You *will* see NaNs in
> >         Haskell if you interact with other languages, most of them take
> >         a far less religious approach to floating points calculations.
> >
> >         This is not true. As Carter pointed out we can setup the CPU to
> >         trap NaNs *even in foreign calls*. So, in theory we CAN rule
> >         this out safely. Doing this we can simply convert the trap into
> >         an exception at the FFI boundary.
> >
> >         Now, there are cases were this is problematic, so as said before
> >         we will probably need to allow people to optionally switch on
> >         'value NaNs', because the foreign code isn't exception safe or
> >         for other reasons, but this is manageable. Via, for example
> >         having an annotation on foreign imports whether you want to trap
> >         or not.
> >
> >         In the scenario where someone switches to value NaNs, we are
> >         *still* not worse off than we are now. The things you suggest
> >         already happen *now*, so the only thing we're advocating is
> >         making it possible to have more sane behaviour in the future.
> >
> >         Any IEEE-754 compliant implementation of Double that doesn't use
> >         trapping NaN can, by definition, never ever be a sane
> >         implementation of Ord. As IEEE-754 *requires* "NaN /= NaN", so
> >         equality symmetry doesn't apply to NaNs and there is *no* safe
> >         way to sort/order data containing NaNs.
> >
> >         I've run into several nasty issues of trying to sort lists
> >         containing NaNs (not just Haskell, also Python and C) and it's
> >         *not* just the NaNs that are affected, entire subsequences end
> >         up getting sorted wrong based on the comparison with NaN and you
> >         end up with completely garbled and unsorted data.
> >
> >         In other words, there are only two ways to get sane behaviour
> >         from Double with regards to ordering:
> >
> >         1. Trapping NaN represenation
> >         2. Deviate from IEEE-754 semantics
> >
> >         To me, option 2 is out of the question, it's the one consistent
> >         thing across language we have when it comes to floating point. I
> >         understand that *always* using trap representation isn't
> >         feasible, but allowing people to optionally switch to value NaNs
> >         leaves us no worse off than we are *right now*, and per above,
> >         there is literally no way to improve the situation wrt value
> >         NaNs without sacrificing IEEE-754 compliance.
> >
> >         Cheers,
> >         Merijn
> >         _______________________________________________
> >         Libraries mailing list
> >         Libraries at haskell.org <mailto:Libraries at haskell.org>
> >         http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
> >
> >     _______________________________________________
> >     Libraries mailing list
> >     Libraries at haskell.org <mailto:Libraries at haskell.org>
> >     http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
> >
> >
> > _______________________________________________
> > Libraries mailing list
> > Libraries at haskell.org
> > http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
> >
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20190211/31ab5913/attachment.html>


More information about the Libraries mailing list