That’s a very good point, IMHO.
- Dave Sweeris
> On Jun 27, 2016, at 2:43 PM, Stephen Canon via swift-evolution 
> <[email protected]> wrote:
> 
> 
>> On Jun 27, 2016, at 3:34 PM, Saagar Jha <[email protected]> wrote:
>> 
>> Seems fine to me. One addition though: some sort of round(withPrecision: Int)
> 
> I noted in another post on this thread that this doesn’t actually make any 
> sense for FloatingPoint.  I’ll flesh that out here for everyone’s benefit.
> 
> When people talk about rounding to some precision, they almost universally 
> mean “some number of decimal digits”.  But for binary floating-point types, 
> rounding to any number of decimal digits other than zero doesn’t actually 
> work.  E.g.:
> 
>       (1.15).round(withPrecision: 1) // returns 1.1
> 
> Why do we get 1.1 here instead of the expected 1.2?  Because 1.15 is actually 
> 1.149999999999999911182158029987476766109466552734375.  For that matter, we 
> haven’t actually succeeded in rounding to one decimal digit; the resulting 
> value isn’t actually 1.1, but rather 
> 1.100000000000000088817841970012523233890533447265625.
> 
> For binary floating-point types, the correct way to make rounding to a fixed 
> number of digits behave as expected is to do it *at the point that the value 
> is converted to a String for display, as part of the formatting*, never as a 
> separate operation.
> 
> For a hypothetical DecimalFloatingPoint protocol, on the other hand, it would 
> be perfectly reasonable to have the proposed operation:
> 
>       func rounded(digits: Int = 0, rule: RoundingRule) -> Self
> 
> – Steve
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution

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

Reply via email to