Regarding Decimal - it's not yet implemented on Linux, but it's a work in 
progress.

Alex

> On 12 Sep 2016, at 18:49, Stephen Canon via swift-users 
> <swift-users@swift.org> wrote:
> 
> 
>> On Sep 12, 2016, at 1:26 PM, Jens Alfke via swift-users 
>> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:
>> 
>>> On Sep 12, 2016, at 10:10 AM, Teej . via swift-users <swift-users@swift.org 
>>> <mailto:swift-users@swift.org>> wrote:
>>> 
>>>     …in spite of the CPU’s quirks in handling floating point numbers in a 
>>> maddening inaccurate manner.
>> 
>> Well, in the CPU’s defense, it’s only inaccurate because the puny humans 
>> insist on dividing their currency into fractions of 1/10, which has no exact 
>> representation in binary. (Apparently this is an ancient tradition 
>> commemorating the number of bony outgrowths on certain extremities of their 
>> grotesque meat-bodies.) I could — I mean, the computers could — point out 
>> that if we divided our currency units into 7 pieces, our precious decimal 
>> numbers would quickly become inaccurate too. :)
> 
> Expanding a bit on what Jens wrote here: decimal (unlike friendship) is not 
> magic.  All computer models of real-number arithmetic are necessarily 
> inexact, because (almost all) real numbers are not computable.  There are a 
> bunch of reasonable choices that one can make, however (this is not an 
> exhaustive list, just a sampling of the design space):
> 
> Binary floating point
> Pro: represents modest integers exactly, extremely fast hardware 
> implementations, fixed memory size, and rounding errors are extremely 
> uniform—they don’t vary much with the number being represented.
> Con: almost no decimal fractions have exact representations.
> 
> Decimal floating point
> Pro: represents modest integers and decimal fractions exactly, slower than 
> binary but still faster than almost anything else, fixed memory size.
> Con: at least an order of magnitude slower than binary floating-point, and 
> rounding error is significantly less scale-invariant.
> 
> Fixed-size rationals
> Pro: represents all modestly-sized integers and fractions exactly, fixed 
> memory size, four basic operations are exact until you hit the limits of 
> representation.
> Con: denominators quickly grow too quickly to be used for non-trivial 
> computations (this is usually a deal-breaker).
> 
> Arbitrary-precision rationals
> Pro: closed under four basic operations, represents most numbers most people 
> will use exactly.
> Con: representations get extremely large extremely quickly, large memory 
> footprint if you have more than a few numbers.
> 
> Computable real numbers
> Pro: any number you can describe, you can work with.
> Con: your numbers are now computer programs, and you arithmetic system is 
> Turing-complete.  Testing for equality is equivalent to solving the halting 
> problem.
> 
>> Teej . via swift-users <swift-users@swift.org 
>> <mailto:swift-users@swift.org>> wrote:
>> 
> 
>> It still does not answer my question on why we can’t just provide a decimal 
>> data type.
> 
> The only problem here is the “just”.  We can and will provide a decimal data 
> type.  Like many other language changes, that we can and will do, it requires 
> engineering time, and there are finite engineering resources available to 
> work on it.
> 
> Keep in mind that decimal will not magically solve all accuracy problems, 
> however.  1/3 is just as inaccurate in decimal as it is in binary 
> floating-point (actually, it’s less accurate in decimal than in a comparable 
> binary format due to the aforementioned non-uniformity of decimal rounding 
> error).
> 
> – Steve
> _______________________________________________
> swift-users mailing list
> swift-users@swift.org
> https://lists.swift.org/mailman/listinfo/swift-users

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to