[Gnucash-changes] r13248 - gnucash/trunk/src/calculation - Fix
Bug 107876 - financial calculator would call exit(1) if calculation
resulted in an interest rate of zero.
Derek Atkins
warlord at MIT.EDU
Sun Feb 12 21:08:37 EST 2006
Neil,
Quoting Neil Williams <codehelp at cvs.gnucash.org>:
> @@ -1257,7 +1259,9 @@
> static double
> _C (double eint, double pmt, unsigned beg)
> {
> - return pmt * _B (eint, beg);
> + unsigned check = _B (eint, beg);
> + if(check) return pmt * check;
> + return 0.0;
> } /* _C */
I'm not convinced this patch is correct. _B() returns a double, but
you're assigning it to an unsigned -- so you're going to lose data
in the case. I also don't see why it matters here; there's nothing
illegal about multiplying by zero.
> @@ -1431,6 +1434,7 @@
> double eint = eff_int (nint / 100.0, CF, PF, disc);
> double AA = _A (eint, per);
> double BB = _B (eint, bep);
> + if(BB == 0.0) return 0.0;
You're also inconsistent with your checks. Sometimes you say:
if (foo)
and others (like here) you say:
if (foo == 0.0)
Any particular reason for the inconsistency? Could we choose one
for a particular patchset?
> return -(fv + pv * (AA + 1.0)) / (AA * BB);
> } /* _fi_calc_payment */
> @@ -1530,7 +1534,7 @@
> double AA = _A (eint, per);
> double CC = _C (eint, pmt, bep);
> double D = (AA + 1.0) / (1.0 + eint);
> -
> + if(CC == 0) return 0.0;
And yet another inconsistency -- == 0 instead of == 0.0.
Are you sure this code even still works? Is there a test case that shows
the actual bug(s)?
-derek
--
Derek Atkins, SB '93 MIT EE, SM '95 MIT Media Laboratory
Member, MIT Student Information Processing Board (SIPB)
URL: http://web.mit.edu/warlord/ PP-ASEL-IA N1NWH
warlord at MIT.EDU PGP key available
More information about the gnucash-devel
mailing list