> On Jul 1, 2016, at 7:44 AM, Joseph Lord via swift-evolution
> <[email protected]> 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
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution