[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