[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.
Neil Williams
codehelp at cvs.gnucash.org
Sun Feb 12 19:12:46 EST 2006
Author: codehelp
Date: 2006-02-12 19:12:45 -0500 (Sun, 12 Feb 2006)
New Revision: 13248
Trac: http://svn.gnucash.org/trac/changeset/13248
Modified:
gnucash/trunk/src/calculation/fin.c
Log:
Fix Bug 107876 - financial calculator would call exit(1) if calculation resulted in an interest rate of zero.
Modified: gnucash/trunk/src/calculation/fin.c
===================================================================
--- gnucash/trunk/src/calculation/fin.c 2006-02-12 23:13:06 UTC (rev 13247)
+++ gnucash/trunk/src/calculation/fin.c 2006-02-13 00:12:45 UTC (rev 13248)
@@ -1247,7 +1247,9 @@
if (eint == 0.0)
{
fprintf (stderr, "Zero Interest.\n");
- exit (1);
+ fflush(stderr);
+ return 0.0;
+/* exit (1);*/
} /* endif */
return (1.0 + eint * (double) beg) / eint;
@@ -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 */
/* compute Number of Periods from preset data */
@@ -1289,8 +1293,7 @@
{
double eint = eff_int (nint / 100.0, CF, PF, disc);
double CC = _C (eint, pmt, bep);
-
- CC = (CC - fv) / (CC + pv);
+ if(CC) CC = (CC - fv) / (CC + pv);
return (CC > 0.0) ? log (CC) / log (1.0 + eint) : 0.0;
} /* _fi_calc_num_payments */
@@ -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;
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;
return (double) per *(pv + CC) * D - (AA * CC) / eint;
} /* fip */
More information about the gnucash-changes
mailing list