> On Jul 1, 2016, at 7:44 AM, Joseph Lord via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> 
>> The review of "SE-0113: Add integral rounding functions to FloatingPoint" 
>> begins now and runs through July 5. The proposal is available here:
>> 
>>   
>> https://github.com/apple/swift-evolution/blob/master/proposals/0113-rounding-functions-on-floatingpoint.md
>> 
>>   * What is your evaluation of the proposal?
> 
> It is an improvement but would it be even better if the return type was Int 
> (or possibly type inferred to Int16 etc.). If a float is really desired it 
> can be initialised from the Int (or it could even infer float result is 
> required). 

This is a common thought, but it's precisely backwards from a numerics and 
pragmatics perspective.  The result is always representable as `Self`, and 
generally not representable in any fixed-width integer type.  If you have the 
version that produces `Self`, getting an integer falls out trivially:

        let y = Int(x.rounded(.up))                             [1]

But if you only have the version that produces an integer result, you’re stuck 
with a much more complex workaround when you actually need the result as `Self` 
(which is more common than you think).  In the best case scenario, where `Int` 
is bigger than the significand of `Self`, it’s not *too* bad, but still 
requires at least a conditional and two conversions.  In the bad scenario, a 
floating-point type whose significand doesn’t fit in `Int`, you end up needing 
to write all the rounding logic yourself.

The idea of also having a set of Integer inits that round has been mentioned 
once or twice in the past:

        let y = Int(roundedUp: x)

I’m not sure if that’s really any cleaner than [1], but it could certainly be 
considered as another proposal.

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

Reply via email to