> On Apr 22, 2017, at 10:58 PM, Chris Lattner via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> I don’t think that this proposal is acceptable as written.  I think it is 
> really bad that abstracting a concrete algorithm would change its behavior so 
> substantially.  I don’t care about SNaNs, but I do care about the difference 
> between +0/-1 and secondarily that of NaN handling.  It seems really bad that 
> generalizing something like:
> 
> func doThing(a : Double, b : Double) -> Bool {
>   ….
>   return a != b
> }
> 
> to:
> 
> func doThing<T : FloatingPoint> (a : T, b : T) -> Bool {
>   ….
>   return a != b
> }
> 
> would change behavior (e.g. when a is -0.0 and b is +0.0).   Likewise, "T : 
> Equatable”.

Did I misunderstand the proposal? If T : FloatingPoint is not included in level 
1 comparisons, then you cannot have classes of generic floating point 
algorithms.

I personally feel sets/dictionaries of FloatingPoint keys to be more brittle 
than other types merely on the basis of the FloatingPoint numbers being an 
approximation within the real space. Different ways to compute a number may 
have different rounding errors, which makes container lookup less useful.

In my opinion this is much more about making generic algorithms relying on 
equatable/hashable/comparable able to make safe assumptions.

-DW
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to