Hieverybody,
Sincethis is a relatively long post, there are summaries at each end. Thefirst section runs through "Old Business." The secondsection starts with "New Business." The third section isjust the attachment. To see the illustrations, please unzip theattachment,if present. Cordially, Bruce New Business ============ The rational fraction you enter asinput is perfectly correct. Every approximation introduces an error.In GnuCash's case, John says, "GnuCash's number system usesrational numbers represented as the ratio of two 64-bit integers;that allows a lot of precision but not infinite precision. Prices maybe rounded to be representable. That's unlikely to have a materialeffect on any calculation, unlike the rounding of quantities..."So, John says at least two things. GnuCash approximates rationalnumbers and GnuCash's approximation is not of infinite precision, butpretty close, compared to the other approximations GnuCash uses inits internal calculations for quantities. The following section addressesfour areas. Each area will tend to be addressed in the order in whichit is mentioned in your post. 1. The rational fraction you enteras input is exactly correct. 2. TerryBoldt's asserts thatin processing the input data approximations may be used. Is Terry'sassertion supported or not? 3. If approximations are not used,GnuCash needs no changes in precision. If approximations are used, arelatively simple change could be implemented to balance one's books. 4. I appreciate the care each ofyou has taken in reading and responding to these posts. On 2023-09-14 20:43:29EDT, JimDeLaHunt via gnucash-user wrote: >Wait,you skipped a step. You have still not demonstrated that the >currentimplementation is wrong. I believe that for securities >transaction,GnuCash gives a result which is both correct (satisfies the >equationrelating price, quantity, and amount) and precisely accurate >(givesthe require numbers with zero difference from the true result). Jeff Earickson noticed that GnuCashis occasionally not precise enough. He wants his books to balance,but they don't. Terrysays that on the occasions in which the computer is unable tocalculate exactly correctly, he was forced to use an approximation.Once upon a time, it was common to say, "Garbage in; garbageout." This phrase recognized that if one entered nonsense datainto a computer it would produce, as a rule, nonsense on output. Ofcourse, what we all hope is that if we enter exactly correct data, asdone in this specific case, the computer will output data that isalso correct. If this were not to be the case, can we imagine ourfeelings? IfGnuCash is no longer using an approximation, then it is quitepossible that GnuCash gives a result which is both correct andprecisely accurate?" If GnuCash is still using an approximation,could it be that "GnuCash gives a result which appears to beboth correct (almost all the time) and (very close to being)precisely accurate?" IfTerry's approximation, or a similar one, is still present in GnuCash.Would one implication be that, on occasion, a user would find thatGnuCash has output a result that is only very close to being exactlycorrect? >Anyother arithmetic library dropped into GnuCash would give exactly the >sameresult. (Aside: Frankly, I'd like this tobe the case. If GnuCash were exactly precise, then we would not haveto be concerned about any imprecision in it.) GnuCash is among the programs thatneeds high precision in their calculations. Other programmers havedeveloped approximations of greater precision to provide theprecision needed for their calculations. For financial applications,decimal libraries have been developed. Development occurred between2000, when Terry wrote GnuCash, and 2003; development has onlyaccelerated in the two decades since. Could we ask, "If Terry'sapproximations are always precise enough, why did so many people doso much work to improve their precision and why did they also gothrough the additional effort to develop decimal libraries?" Ifwe did, one might suppose that either they wasted their time andeffort or they had good reasons to do the work. Gnucash appears to be, to me, anexcellent program. I am impressed by all the fine work that has beenand is being done on it. And I would like to use it. GnuCash almost always calculatesfinancial information to the precision required for work at hand. Inmy understanding of it, the incremental change under consideration isthe difference between "excellent" and "perfect."For our financial calculations precision, I'd say GnuCash isapproximately one smidgen away from being perfectly suitable. Of course, there are things I donot know about the proposed revision. Will the programmers find itmore feasible to just increase the precision of the calculations wenow have, will they be able to utilize the decimal arithmeticlibraries easily? Since they are going to have to do the work, I'dfavor letting them decide the specifics on how they wish to proceedto the ultimate goal. However, as an intermediate solution, manualentry is relatively simple to program and would be more immediatelyhelpful >Ah, maybe now we are gettingsomewhere. Bless you. You still hope I may beable eventually to explain things clearly. >GnuCashdoes allow you to enter the exact value of $15.00 for the >transactionamount. You do not need to enter a price. Have you tried >thisin the GnuCash UI? Yes, sir. I'll try to send you agraphic, FH B Test, showing it. In it, the salient line shows a saleof 2.396 shares indicated by (2.396) in the Tot Shares column. In theunlabeled Price Per Share column is 6 + 156/599. The Tot Sell columnhas 15.00 representing the annual fee FH charged. It is our pleasure to know that2.396 shares * (6 + 156/599) dollars/share = $15.00. This equationdoes meet the requirement of "Logically,$value = $price/share * #shares, and this should be preciseequality." There is absolute certainty that the rational numberyou are entering into the computer is perfect for the calculationrequired. Abasic question this post is discussing is whether the computer isactually calculating with the perfect number it was given or whetherit is actually calculating with an approximation of the perfectnumber it was given. Sofar we have two indications that the computer is usingapproximations. 1)Terry said so. (Could we ask the developers whether approximationsare still used?) 2)Computers use arithmetic of base 2. 3)Display accuracy is very frequently, but not always, correct. Figure9.21. Selling Shares for Gain Where the Sale and Gain are Recorded inSeparate Transactions, in Transaction Journal View >When you try to enter theexample transaction at hand..., you are probably >using the stock transactionregister. Ifonly I were that good. It is a mutual fund and I entered it into thestandard transaction register. I'll implement your impliedsuggestion. Thank you for it. Thetransaction does correspond to the transaction of Figure 9.21 for thedate of 03/221/2006. The line in the Action column of Figure 9.21labeled Sell shows "Sell,Gross Sale 100 @ 36 = 3600, Assets:Brokerage Account:Stoc:AMZN, n,-100, 36, , 3,600.00." "Sell, ,Assets:Equity:MutualFund:FHB Test, n, (2.396), 6 + 156/599, , 15.00"was the corresponding line in the transaction register on my machine. >Guide[1]...TransactionJournal View"[3]...(Thesenumbers in square >bracketsare footnotes to URLs. I put the full URLs at the bottom of >themessage to make this part easier to read.)...Footnotes:... Thankyou for both the formatting and the explanation. I felt your choiceswere much clearer than mine. >3. The line with account"Assets:Brokerage Account:Stock:AMZN" is the >one with the UI which mattershere. I agree with you. >When you save the transaction,GnuCash will fill in the price for you. I agree. >What Isee it fill in is, "6+ 156/599". My machine did the same thing thatyours did. >This is equal to the rationalnumber 3750/599. We saw this number before, >as the price which exactlyrelates 2.396 shares to the $15.00 transaction >amount. Yes, in this case both our machinesdisplay results accurate to the number of significant digits shown.There is no doubt that this calculation, despite the approximationTerry was forced to use, appears to be exactly correct. GnuCash doesuse a very close approximation of the fraction, when it is unable tocalculate using the exact fraction it was given as input. If GnuCashis still using an approximation in its calculations and if Terry isan authoritative source, what could we expect to see in this specificexample? If Terry's approximation is relatively poor, we would seethe error. If his approximation is relatively accurate, we would seeresults that equal the completely accurate results. We would not seethe error. These results do look like thecomputer did the calculation correctly. The appearance of accuracyand precision is not in question in this specific example. So, either the computer actuallycalculates accurately or the approximation is good enough, in thisexample, to display a result which appears to be accurate. 4-5) Rounding error, Commutation,respectively. Rounding errors Figure 9.10. The TransactionRegister Of The AMZN Account After The First Purchase >This UI is also explained inthe Tutorial and Guide, section 9.5 Buying >Shares[4]. It is. For the 01/01/2005 entry inthe Action column, the row with Buy has the following items: "Buy,, Assets:BrokerageAccount:Stock:AMZN, n, 100, 20, 2,000.00, ." >It says there...to avoidrounding errors, it is better >to automatically calculate*Price* On Sun Feb 23 10:15:34 EST 2014,Mike Novack stepbystepfarm at mtdata.com discussed a trade usingGnuCash 2.61. In the discussion, Jeff Earickson concisely expressedhis feelings "1377.41 x 10.89 = $14,999.99 (one penny off,arrrgh...)"[1]. He spent $15,000 to buy 1,377.41shares. He paid about$10.89000370260125 888442802070552703987919355892581003477541182364002003760681278631634734755809 81697/share. Were one to multiply1,377.41 shares by $10.89000370260125888442 80207055270398791935589258100347754118236400200376068127863163473475580981697/share,he would get$14,999.99999999999999999999999999999999999999999999999999 99999999999999999999999999999999999999999999. If $10.8900037... (compared to$10.89000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000)is not an error, why not? If it is not a rounding error, whatkind of error is it? If it is a rounding error, why doesGnuCash say, "to avoid rounding errors, it is better toautomatically calculate *Price*?" Commutation In the discussion, Mike noted "ifA / B = C then B * C = A"[1]. In math, please correct me asnecessary, this property is called "Commutation." Althoughit is not present in every numerical system, it is the commonly useddefault practice. Mike says, "In other words,you were assuming that if A / B = C then B * C = A even when roundingis involved. Not true. Not necessarily exactly equal"[1]. If commutation is absent, what arethe implications? If calculations are exactly precisecan one have a rounding error? >Have you tried entering thisstock transaction without entering the >price, and letting GnuCashcalculate it for you? Yes. It calculates the price pershare as above in "3)Display accuracy is very frequently correct." >The stock transaction registerprovides exactly these data-entry >fields. They are notread-only. Do you see, in your copy of GnuCash, >something similar to the UIdepicted in Figure 9.21? Yes. The stock transaction registerdoes provide exactly these data-entry fields. They are not read-only. I do see,in my copy of GnuCash, something similar to the UI depicted in Figure9.21. Thank you for pointing this out tome! This is exactly what we need -- three data fields for Shares,Price, and Value which are not read-only. I appreciate your familiarity withthe GnuCash user interface. Although I have read the GnuCash helpdocumentation and Tutorial, you have assimilated the information intoa useful fund of knowledge. I have not. Were Jeff to have entered figuresfrom his brokerage statement, he might have seen something similar tothe graphic below (Graphic 1). Graphic 1. Graphic 1 shows the RecalculationTransaction window. The first line says, "The values entered forthis transaction are inconsistent. Which value would you like to haverecalculated? Below that line are three lines with an initial radiobutton followed by an instruction. Respectively they are Shares(Changed), Price (Changed), and Value (Changed). At the right side ofthe last line there are two choices -- "Cancel" and"Recalculate." The developers would know thatthere is more to coding a manual solution than adding a line belowthe Value (Changed) line, and setting a flag, but not too much more,as coding goes. The code ingnucash\register\ledger-core\split-register.c shows the following: Code -- Start: static int recalc_message_box(SplitRegister* reg, gboolean shares_changed, gboolean price_changed, gboolean value_changed) { intchoice; int default_value; GList* node; GList* radio_list = NULL; const char* title = _("RecalculateTransaction"); const char* message = _ ("Thevalues entered for this transaction " "are inconsistent. Which value would you " "like to have recalculated?"); if (shares_changed) radio_list= g_list_append (radio_list, g_strdup_printf ("%s (%s)", _("_Shares"), _("Changed"))); else radio_list= g_list_append (radio_list, g_strdup (_ ("_Shares"))); if (price_changed) radio_list = g_list_append (radio_list, g_strdup_printf ("%s(%s)", _ ("_Price"), _("Changed"))); else radio_list= g_list_append (radio_list, g_strdup (_ ("_Price"))); if (value_changed) radio_list= g_list_append (radio_list, g_strdup_printf ("%s (%s)", _("_Value"), _("Changed"))); else radio_list= g_list_append (radio_list, g_strdup (_ ("_Value"))); if (price_changed) default_value = 2; /* change the value */ else default_value = 1; /*change the value */ choice = gnc_choose_radio_option_dialog (gnc_split_register_get_parent (reg), title, message, _ ("_Recalculate"), default_value, radio_list); for(node = radio_list; node; node = node->next) g_free(node->data); g_list_free (radio_list); return choice; } End -- Code. To accept the user's entries,adding another "if... else..." pair after the "if(value_changed)..."statement, setting a flag, etc. would be a relatively simple, interimsolution. If implemented, Jeff could enter 1,377.41 (Shares), 10.89(Price/share), and 15,000 (Value) into his machine, as seen inGraphic 1 in the line labeled "Buy." The machine would savethose values. Jeff's books would balance. Jeff would have no need toemail gnucash-users seeking a solution. This is a possible interimsolution. A more permanent solution would await the developers'further evaluation. >have you read through all ofSection 9 of the Tutorial and Concepts >Guide? I have not read all of Section 9 ofthe Tutorial and Concepts Guide. Concerning the areas of my currentinterests, I have copied the information from the Guide to a documentand have added personal highlighting, underlining, and notes. I havenot yet done this for Selling Shares, Dividends (including Return ofCapital), and Splits and Mergers, since I do not need thatinformation, in detail, at the moment. I have done similar things forthe other sections of the Tutorial and Concepts Guide. > Have you made a simple bookfor learning purposes, with made-up data Yes. I have two types of referencesfor learning. One type is a general book. In it the information isall in one file. The second type of reference has the material forlearning located near the file in which it is needed. "FH BTest" (v.s.) is one of the second type. >and followed along with theexamples in the Guide? Yes, but only if they were germaneto me. In conclusion ============= Jeff Earickson expected GnuCash tobalance his books, but it did not. Your rational number input isperfect, but the computer isn't precise enough. GnuCash can be made precise enoughto balance books. A relatively simple change by thedevelopers is an interim solution. The developers may consider aninterim and other, more precise solutions. Footnotes: [1]https://lists.gnucash.org/pipermail/gnucash-user/2014-February/053296.html, https://lists.gnucash.org/pipermail/gnucash-user/2014-February/053299.html. | | Virus-free.www.avast.com | _______________________________________________ gnucash-user mailing list gnucash-user@gnucash.org To update your subscription preferences or to unsubscribe: https://lists.gnucash.org/mailman/listinfo/gnucash-user ----- Please remember to CC this list on all your replies. You can do this by using Reply-To-List or Reply-All.