Proposal for modifying gnucash to use exact quantities]
Christopher Browne
cbbrowne@hex.net
Fri, 28 Jul 2000 00:27:32 -0500
On Wed, 26 Jul 2000 18:07:36 +0100, the world broke into rejoicing as
Steven Murdoch <sjmurdoch@linuxfan.com> said:
> Richard Wackerbarth wrote:
> >
> > On Tue, 25 Jul 2000, Terry wrote:
> > > Actually - yes - the stock are purchased through dividend
> re-investment.
> > > The dividend is computed to 1/1,000 USD (stock total is carried on
> their
> > > books to 1/1,000 and the dividend is computed to 1/1,000 USD per
> stock
> > > unit.) Thus the transaction value in USD is computed to 1/1,000
> USD. They
> > > then purchase additional stock to 1/1,000 stock at the total value
> computed
> > > in 1/1,000 USD. The whole transaction is carried out "on the
> books", no
> > > cash changes hands, but the transaction value is computed to
> 1/1,000 and
> > > that is the smallest unit of the transaction that is accounted for.
> Granted
> > > if I sold the stock, I would be paid to within 1/100 USD. But the
> dividend
> > > reinvestment is done to 1/1,000 USD.
> > I don't think so. Rather than computing a dividend to the mill and
> shares
> > from that, I suspect that they either compute "exact" dividend
> shares/share
> > and round that to milli-shares and then compute the value to the
> penny or
> > they compute the dividend to the penny and then convert that into
> fractional
> > shares.
> >
> > I would be very interested in seeing a real example that contradicts
> my
> > hypothesis.
> I use Gnucash to track my shares, and in the UK shares are quoted in
> 1/4
> of a pence, but in every source I have seen they are listed to 2
> decimal
> places (in pence).
> I happen to have a prime number of shares, so I often have fractions
> when I am calculating the total worth of my investment. I also have a
> share investment fund with the same company which I represent with an
> equity account, when I buy shares money is transfered from my dealing
> account to the precision of 2 decimal places of a penny (i.e. GBP
> 1/10,000). For this to be represented with no chance of rounding errors
> the quantity of shares should be an integer, price an integer number of
> 1/10,000 of GBP and value should either be calculated as an integer
> numebr of 1/10,000 GBP.
>
> In none of my applications I need rational numbers though, as
> everything
> can be represented exactly in fixed decimal point notation. The only
> case I could forsee this would be if one could buy 1/3 of something or
> if prices were quoted as 1/3 of a dollar (or other currency unit).
> If rational numbers are indeed not required then the implementation of
> the library would be simplified and more importantly the integration
> into Gnucash would be easier. This isn't a flame, I am just curious to
> see if there are situations in finance where rational numbers are used,
> as opposed to fixed decimal point.
Some stocks are priced in units of 1/8, 1/16, 1/32, and some bonds are
priced in units of 1/64th.
None of those divide evenly into any power of ten that we'd be likely
to use.
<Warning: I'm playing a mathematician playing with a bit of number theory
here, and am decidedly _NOT_ taking an accounting approach...>
We could probably do _pretty well_ with some fixed base if we used a base
with quite a lot of useful divisors. For instance, 360 has, as factors:
2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 18, 20, 24, 30, 36, 40, 45,
60, 72, 90, 120, and 180
240 has a similarly large set of factors, which allows it to be used
to express quite a lot of the useful fractions that people actually
use, with the merit that it can express 16ths evenly.
Note that 240 is less than 255, and thus:
a) Nicely fits in a byte,
b) Provides lots more range than BCD, which can only express
values up to 100 in a byte, and
c) Due to all the divisors, LOTS of simple fractions work out
evenly so you don't get the situation where 1/9, in decimal
is expressed as 0.9090909090..., or where 1/10, in binary,
is expressed as 0.000110011001100...
In base 360, 1/9 is (0, 40), and 1/10 is (0, 36)
In base 240, 1/10 is (0, 24), and 1/9 is (0, 26, 160)
Admittedly, 1/7 and 1/11 are still continuing fractions,
but any values that are representable as
v = 2^k * 3^l * 5^m
can _all be represented _exactly_, and that's pretty valuable.
This is _probably_ part of why a full rotation represents a rotation of
360 degrees, rather than 100.
And the fact that only 2 divides into 2 is why base 2 sucks quite badly
for doing fractional math.
Base 12 is probably better than base 10, which takes me back to an old
anti-Metric System joke about how if "The Good Lord meant us to use the
metric system, there would have been _10_ disciples, rather than 12."
<end of "fun with bases" screed... I'm having entirely too much
fun with this...>
In any case, YES, there ARE things that are denominated in such fractions.
Actually most _do_ seem representable using the formula
denominator = 2^k * 3^l * 5^m
which suggests that what I wrote up above _isn't_ just "mathematical
madness," but might reflect some things we actually see...
--
cbbrowne@ntlug.org - <http://www.hex.net/~cbbrowne/linux.html>
"Microsoft builds product loyalty on the part of network
administrators and consultants, [these are] the only people who really
count in the Microsoft scheme of things. Users are an expendable
commodity." -- Mitch Stone 1997