--On May 31, 2014 11:19:23 PM +0200 Christian Stimming
<christ...@cstimming.de> wrote:
But back to your initial question: You said we occasionally
"encounter overflow errors". I don't understand (yet) what the
actual problem is. With our current rational numbers and int64_t
numerator we have approx. 19 decimal digits of precision (see [2]
for the digits of a 64 bit signed integer), if I consider the
numerator as fully used.
Are 19 significant decimal digits not enough? Are there thinkable
cases when they are not enough? I tend to think the problem is
rather found in our rational number's rounding, which is not the
suitable rounding method for our financial application domain. If
this is the problem, a different data type that does the rounding
always according to decimal numbers, and not according to (in normal
float/double calculations) binary floating point numbers, or (in
gnc_numeric) according to rational numbers with some potentially
unknown denominator.
Rounding along with division is at least part of the cause of
overflows. I dealt with a number of overflow problems in the advanced
portfolio report that were the result of the interaction of rounding
and division. I solved it by essentially converting things to a
decimal notation. I picked a (hopefully) sufficiently large decimal
denominator and rounded relevant calculations to that denominator. I
think this is more or less what you're suggesting in the context of the
current implementation.
Division of rational numbers, which is what GnuCash does, involves the
calculation of GCDs (or something similar) which can produce very large
integers. Years ago I was involved with the Reduce algebraic system
which implements arbitrary precision rational numbers mainly for this
reason. It needs to exactly divide rational numbers with no rounding
so it can, for example, factor polynomials. All but the most trivial
calculations quickly exceeded the range of hardware integers. We don't
need that, of course. Our problem seems to be that we're using
rational numbers where it isn't really necessary.
Mike
_______________________________________________
gnucash-devel mailing list
gnucash-devel@gnucash.org
https://lists.gnucash.org/mailman/listinfo/gnucash-devel