AUDIT: r17421 - gnucash/trunk/lib/libqof/qof - Add a new function to the gnc_numeric library that converts denominators to exact powers of ten.
Andreas Köhler
andi5.py at gmx.net
Mon Sep 1 16:53:08 EDT 2008
Hi Charles,
On Mon, 2008-09-01 at 13:44 -0700, Charles Day wrote:
> On Mon, Sep 1, 2008 at 1:09 PM, Andreas Köhler <andi5.py at gmx.net>
> wrote:
> Hi Charles,
>
> On Sun, 2008-07-27 at 11:33 -0400, Charles Day wrote:
> > Trac: http://svn.gnucash.org/trac/changeset/17421
> > Log:
> > Add a new function to the gnc_numeric library that converts
> denominators to exact powers of ten.
>
> > Modified: gnucash/trunk/lib/libqof/qof/gnc-numeric.c
> >
> ===================================================================
> > --- gnucash/trunk/lib/libqof/qof/gnc-numeric.c
> 2008-07-27 15:11:19 UTC (rev 17420)
> > +++ gnucash/trunk/lib/libqof/qof/gnc-numeric.c
> 2008-07-27 15:33:23 UTC (rev 17421)
> > + fraction = converted_val.denom;
> > + if (fraction <= 0)
> > + return FALSE;
>
> out of curiosity, what is the reason for disallowing negative
> denominators? I am not sure whether there is a gnc_numeric
> API function
> to switch signs of nom and denom safely, but I am sure that
> doing it is
> possible :-) But maybe the current behavior is actually
> desired.
>
> Honestly, I'm not 100% sure what negative denominators mean. The
> function I added is essentially a modified version of
> is_decimal_fraction() from app-utils/gnc-ui-utils.c, and since
> negative denominators were not considered decimal numbers there, I did
> the same.
>
> On the other hand, I believe that a negative denominator of -3 may
> actually mean a denominator equal to 1/3. So if a gnc_numeric of 5/-3
> is equal to 5/(1/3), then that is also equal to 5*3=15. So maybe any
> gnc_numeric with a negative denominator could be converted to a
> decimal number. Perhaps instead of returning FALSE, the routine could
> compute num * abs(denom) and return TRUE. Assuming that the
> multiplication doesn't cause overflow, and that I have understood the
> situation correctly.
>
> Anyway, I think it is OK for the moment, as these types of numbers
> never printed decimally in the past. Perhaps Christian could provide
> more information on what negative denominators mean, and if/how we
> could print them as decimal numbers. If the method I stated above is
> correct, then I think it would be a pretty small change to add support
> for negative denominators in this routine.
I would rather say that you can extract signs from nominators as well as
denominators and put them in front of the fraction. So -(1/3) == (-1)/3
== 1/(-3) and 1/3 == (-1)/(-3). So the change is probably even
easier :) But even reversing signs can result in overflows (in a signed
one-byte integer, -128 may be allowed, whereas 128 is not).
You were probably thinking in negative powers, because (1/3)^(-1) == 3/1
== 3. I just hope I did not talk gibberish :)
Ciao,
-- andi5
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part
Url : http://lists.gnucash.org/pipermail/gnucash-devel/attachments/20080901/73ff3e8b/attachment.bin
More information about the gnucash-devel
mailing list