[swift-evolution] Fix or remove Swift.min and Swift.max?
Pyry Jahkola
pyry.jahkola at iki.fi
Sun Jul 3 16:28:22 CDT 2016
+1, and bumping this topic.
The background — which I'm sure Jens is aware of — is that IEEE-754 floating point numbers can't truly conform to Comparable. (The problematic case being that neither of `x < .nan`, `x == .nan`, or `x > .nan` can be `true`.)
But given that the NaN-abolishing semantics of `fmin` is quite useful, and since we also want that Double and Float remain conforming to Comparable (albeit brokenly), could we consider fixing this issue by moving `min(_:_:)` and `max(_:_:)` into Comparable?
The Comparable protocol would become:
public protocol Comparable : Equatable {
func < (lhs: Self, rhs: Self) -> Bool
func <= (lhs: Self, rhs: Self) -> Bool
func >= (lhs: Self, rhs: Self) -> Bool
func > (lhs: Self, rhs: Self) -> Bool
static func minimum(lhs: Self, rhs: Self) -> Self
static func maximum(lhs: Self, rhs: Self) -> Self
}
with default implementations added for the new static functions, and custom implementations for FloatingPoint types. The `Swift.min` and `Swift.max` functions would then forward their logic to `Comparable.minimum` and `Comparable.maximum`.
— Pyry
> On 29 Jun 2016, Jens Persson wrote:
>
> Hi all!
>
> Swift.min (and Swift.max) propagates nan or not depending on the order of its args:
>
> Swift.min(1.0, .nan) // 1.0
> Swift.min(.nan, 1.0) // nan (!)
>
> Double.minimum(1.0, .nan) // 1.0
> Double.minimum(.nan, 1.0) // 1.0
>
> fmin(1.0, .nan) // 1.0
> fmin(.nan, 1.0) // 1.0
>
> The new static minimum and maximum funcs on FloatingPoint in Swift 3 shows the expected behaviour (ie the same as fmin, fmax and IEEE-754), so what should happen with Swift.min and Swift.max?
>
> Fix, remove or perhaps something else?
>
> https://bugs.swift.org/browse/SR-1011 <https://bugs.swift.org/browse/SR-1011>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160704/69a0a881/attachment.html>
More information about the swift-evolution
mailing list