[swift-users] Exceptional values in the Comparable protocol

Martin R martinr448 at gmail.com
Tue Jul 11 12:23:37 CDT 2017


Thank you for the clarification!

> On 10. Jul 2017, at 23:29, Dave Abrahams via swift-users <swift-users at swift.org> wrote:
> 
> 
> on Sun Jul 09 2017, Martin R <swift-users-AT-swift.org> wrote:
> 
>> The Comparable protocol requires that < and == impose a strict total
>> order: exactly one of a==b, a<b, a>b must hold for all values a and b
>> of a conforming type.
>> 
>> But it is also noted that a conforming type may contain a subset of
>> „exceptional values“ which do not take part in the strict total order
>> (such as FloatingPoint.nan).
>> 
>> What does that mean for functions taking comparable arguments, e.g.
>> 
>>    func mySuperSort<T: Comparable>(a: inout [T]) { }
>> 
>> Can the function implementation assume that all values passed to it
>> take part in the strict total order? In other words: „exceptional
>> values“ must not be passed to the function?
> 
> Yes
> 
>> Or must the function take that case into account and must not assume
>> that exactly one of a==b, a<b,
>> a>b holds for any arguments passed to it?
> 
> It need not, but it may do so as a matter of QOI (Quality Of
> Implementation).  It is a good idea to make such a function work for NaN
> if you can figure out what the semantics should be and it doesn't overly
> impact the performance of other important use cases.
> 
> Hope this helps,
> 
> -- 
> -Dave
> 
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users



More information about the swift-users mailing list