Date: prev next · Thread: first prev next last
2016 Archives by date, by thread · List index


At 15:18 10/02/2016 -0500, Virgil Arrington wrote:
About 25 years ago, I was the treasurer of my children's preschool. I created a spreadsheet to calculate paychecks, and I found that the paycheck was consistently off by .01 (a penny). It drove me nuts. As it turned out, one part of the calculation required the division of 28 by 7, which every third grader knows is 4. Well, my spreadsheet gave an answer of 3.9999999999_. By itself, it wasn't a big problem, but later in the chain of operations, the 3.99999_ produced a result that rounded *down* to the nearest penny instead of *up*, which it would have done if the 28/7 had resulted in 4 instead of 3.9999. I complained to a computer friend of mine who tried to explain that the computer's answer was more "precise" than my mental math of 28/7=4. I didn't buy it. I learned a valuable lesson in blindly accepting a computer's calculation simply because it was made by a computer.

I strongly suspect that you didn't, in fact, try to divide 28 by 4 - which your spreadsheet would have got right!

Currency amounts are often expressed in whole pounds or dollars or whatever, with pence or cents as a fraction of the basic currency unit. But these fractions are deceptive: you simply don't want them to be handled the way they are stated. If, for example, you have the value $1.23 and halve it, you don't want the result to be $0.615. The amounts may look like what programmers call "real" or "floating-point" values, but they are actually *integer* values: that $1.23 is better thought of as 123 cents - with no fractional part present.

Spreadsheet values are always real rather than integer, so you have to take care with how you calculate with them. If you halve $1.23 (properly formatted as Currency) in a spreadsheet, the result will be helpfully rounded in the display to $0.62. But the underlying value will still be the correct result of 0.615. You need to be alert to this situation in order to use spreadsheets successfully. You have a number of options, and your choice may depend on circumstances: o You may decide to retain the underlying value (although the displayed value will still be rounded).
o You may round or truncate the value explicitly in your formula.
o You may choose to tick the option at Tools | Options... | LibreOffice Calc | Calculate | Precision as shown.

Depending on your choice, doubling the displayed value of $0.62 may produce $1.23 or $1.24. Both of these results may be helpful in different circumstances. It is perfectly possible to carry out accounting calculations in a spreadsheet providing they are done sensitively.

So what was happening in your case? Well, my guess is that the value you were dividing by 4 was not the integer 28 but instead some currency amount ending in 28 cents. If you express this conventionally as $X.28, you are calculating with a floating-point value having a fractional part of 0.28. Now although this fraction terminates after two decimal digits, it is a recurring binary fraction: 0.01000111101011100001... - with those twenty fractional binary digits recurring indefinitely. It can only be that this value is either truncated or rounded in a cell value. So if you choose to use a spreadsheet conventionally - and here's the important point - an amount of $X.28 is *already* stored only approximately. This is the genuine source of your problem - not any subsequent division by 4.

At 18:14 10/02/2016 -0500, Virgil Arrington wrote:
What I found interesting was that, in the spreadsheet, I got the "wrong" 3.9999, but I wrote a simple BASIC program on my beloved Tandy Model 100 and got the "correct" answer of 4. I was excited to see that my little first generation laptop gave better results than my state of the art (for the time) PC.

Well, we cannot know how you programmed this, but in Basic you may have been forced either to use integer values - in which case you would have represented $1.28 as 128 in cents, avoiding the problem - or else to attend to the rounding explicitly. However you did this, you were probably alert to the very problem of which you needed to be aware in the spreadsheet version. The difference will not have been because your simpler hardware was somehow better at doing elementary arithmetic than your flashy new PC.

At 19:55 10/02/2016 -0700, Ken Springer wrote:
I wouldn't buy it either. I don't care how someone tries to explain it, the result is wrong. Pure and simple. Just try pulling that response on a grade school teacher, and you're going home with an "F". How something can be more "precise" than the correct answer is beyond me. Wrong is wrong, I don't care how somebody wishes to justify it.

Sadly, all this attitude achieves is that you are never going to be able to understand what is happening or to use spreadsheets reliably. That is unfortunate, of course.

I trust this helps.

Brian Barker


--
To unsubscribe e-mail to: users+unsubscribe@global.libreoffice.org
Problems? http://www.libreoffice.org/get-help/mailing-lists/how-to-unsubscribe/
Posting guidelines + more: http://wiki.documentfoundation.org/Netiquette
List archive: http://listarchives.libreoffice.org/global/users/
All messages sent to this list will be publicly archived and cannot be deleted

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.