[swift-dev] Rationalizing FloatingPoint conformance to Equatable

Xiaodi Wu xiaodi.wu at gmail.com
Fri Oct 20 06:50:44 CDT 2017

On Fri, Oct 20, 2017 at 1:22 AM, Jonathan Hull <jhull at gbis.com> wrote:

> +1 for trapping unless using &==.  In the case of ‘Float?’ we could also
> map to nil.
> This is probably a more appropriate discussion for evolution though...
> On Oct 19, 2017, at 9:48 PM, Brent Royal-Gordon via swift-dev <
> swift-dev at swift.org> wrote:
> On Oct 19, 2017, at 4:29 PM, Xiaodi Wu via swift-dev <swift-dev at swift.org>
> wrote:
> D) Must floating-point IEEE-compliant equivalence be spelled `==`?
> In my view, this is something open for debate. I see no reason why it
> cannot be migrated to `&==` if it were felt that `==` *must* be a full
> equivalence relation. I believe this is controversial, however.
> I actually got partway through writing up a pitch on this yesterday, but
> my opinion is that NaNs are so exceptional, and so prone to misuse, that we
> ought to treat them like integer arithmetic overflows: trap when they're
> detected, unless you use an `&` variant operator which indicates you know
> what you're doing.
> I strongly suspect that, in practice, most float-manipulating code is not
> prepared to handle NaN and will not do anything sensible in its presence.
> For example, Apple platforms use floating-point types for geometry, color
> components, GPS locations, etc. Very little of this code will do anything
> sensible in the presence of a NaN. Arguably, it'd be better to exclude them
> through the type system, but I don't think that's a realistic
> possibility—we would need to have done that in a more source-break-friendly
> era. But that doesn't have to mean we're completely stuck.
Built-in floating point operators, as well as libc/libm math functions, are
designed to propagate NaN correctly. This is not meant to be a thread about
NaN, and we need to be cautious to define the scope of the problem to be
solved from the outset. The tendency of having ever-expanding discussion
where issues such as method names turn into discussions about the entire
standard library go nowhere.

The question here is about `==` specifically and how to accommodate partial
equivalence relations. For sanity, we start with the premise that NaN will
forever be as it is.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-dev/attachments/20171020/6eca5968/attachment.html>

More information about the swift-dev mailing list