[swift-evolution] Proposal: floating point static min / max properties

Brent Royal-Gordon brent at architechies.com
Sat Dec 5 15:33:17 CST 2015

> extension Int: RangeDiscoverable {
> 	static let representableRange: Range<Int> = Int.min…Int.max
> }

There’s a problem with that:

	 24> Int.min...Int.max
	fatal error: Range end index has no valid successor

The problem is that Int.min … Int.max is actually represented as Int.min ..< Int.max.successor(), which is obviously not going to work.

> This would require numeric types to conform to ForwardIndexType.  Integer types already conform to RandomAccessIndexType.  Floating point types do not currently conform to ForwardIndexType but could conform not just to ForwardIndexType, but also BidirectionalIndexType.

Floats don’t currently conform to the IndexType protocols because there’s no *natural* interval for them to use. nextUp/nextDown are rarely what you want in practice, while 1 breaks down at large sizes.

However, we can fix both of these issues by using ClosedInterval instead of Range. ClosedInterval requires only that the bounds be Comparable, and doesn’t try to add 1 to the end.

Brent Royal-Gordon

More information about the swift-evolution mailing list