[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