On Jun 10, 2016, at 12:38 PM, Xiaodi Wu via swift-evolution 
<[email protected]> wrote:

> On Fri, Jun 10, 2016 at 1:24 PM, Darren Mo via swift-evolution 
> <[email protected] <mailto:[email protected]>> wrote:
> Today, one can get max/min by doing:
> 
> let max = Float.greatestFiniteMagnitude
> let min = -Float.greatestFiniteMagnitude
> 
> On review of the proposal for the new FloatingPoint, I too commented on the 
> lack of `max` and `min`. You've pointed out the issue with infinity. But 
> also, FLT_MIN (from your local friendly C universe and available in Swift, 
> obviously) is actually the smallest representable positive value, so 
> `Float.min` is of ambiguous meaning. It was therefore decided not to use 
> those words `max` and `min`.

It’s worth noting that this issue has been pretty extensively discussed both 
on- and off-list.  Although convenience is good, the objections to the 
ambiguity of `.max` and `.min` would be *very* hard to overcome:

– They’re not actually the maximum and minimum values of the type.  In 
particular, that `max(Float.infinity, .max)` wouldn’t be `Float.max` is pretty 
seriously confusing.

– The proposed `.min` doesn't align with the meaning of the "float-min-thing” 
in most other major languages:

        In C, FLT_MIN is the smallest positive normal
        In C++, std::numeric_limits<float>::min() is the smallest positive 
normal
        In Python, sys.float_info.min is the smallest positive normal
        In C#, .minValue is documented as “the smallest possible value”, but is 
actually the value you want, rather than the documented –infinity.
        In Java, MIN_VALUE is the smallest positive value (including subnormals)
        In Ruby, MIN is the smallest positive normal
        In R, double.xmin is the smallest positive normal
        In MATLAB, realmin is the smallest positive normal
        Actually, Rust is the only language I know of where `MIN` is the value 
you want *and* correctly documented as such.

All that’s not to say that Swift can’t do this, but there’s a lot of 
opportunity for confusion on this point, and having a very explicit name isn’t 
really a bad thing.

– There is also some concern that having `.min` and `.max` with the same names 
as on Integer types would lead people to try to use them the same way in code, 
which generally isn’t going to work the way users expect.

– Steve
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to