Re: Cosmetic patch for fn-financial.c



Hi Neil,

if the patch I send to Jody is accepted and committed yu'll see that this may not be applicable any more. Within the COUP dunctions at least there would only be a single place left wehre we check for validity of the basis and frequency.

Andreas

Neil Booth wrote:

Wrong patch!  Sorry.  Here's the right one.

Neil.

2002-01-18  Neil Booth  <neil daikokuya demon co uk>

        * functions/fn-financial.c (is_valid_basis, is_valid_freq): New.
        (func_coup_cd, gnumeric_accrint, gnumeric_accrintm,
        gnumeric_intrate, gnumeric_received, gnumeric_pricedisc,
        gnumeric_pricemat, gnumeric_disc, gnumeric_price, gnumeric_yield,
        gnumeric_oddfprice, gnumeric_coupdaybs, gnumeric_coupdays,
        gnumeric_coupdaysnc, gnumeric_coupnum): Use them.

Index: fn-financial.c
===================================================================
RCS file: /cvs/gnome/gnumeric/src/functions/fn-financial.c,v
retrieving revision 1.116
diff -u -p -r1.116 fn-financial.c
--- fn-financial.c      2002/01/16 14:01:36     1.116
+++ fn-financial.c      2002/01/18 21:14:30
@@ -24,6 +24,8 @@
 #include <limits.h>
 #include <string.h>
+#define is_valid_basis(B) (B >= 0 && B <= 5)
+#define is_valid_freq(F) (F == 1 || F == 2 || F == 4)
/***************************************************************************
  *
@@ -324,18 +326,19 @@ func_coup_cd (FunctionEvalInfo *ei, Valu
        }
if (xl) {
-               if (basis < 0 || basis > 4 || (freq != 1 && freq != 2 && freq != 4)
+               if (!is_valid_basis (basis)
+                   || !is_valid_freq (freq)
                    || g_date_compare (settlement, maturity) >= 0) {
                        result = value_new_error (ei->pos, gnumeric_err_NUM);
                        goto out;
                }
        }
-       else
-               if (basis < 0 || basis > 5 || (freq == 0) || (12 % freq != 0)
-                   || g_date_compare (settlement, maturity) > (next ? -1 : 0)) {
-                       result = value_new_error (ei->pos, gnumeric_err_NUM);
-                       goto out;
-               }
+       else if (!is_valid_basis (basis)
+                || !is_valid_freq (freq)
+                || g_date_compare (settlement, maturity) > (next ? -1 : 0)) {
+               result = value_new_error (ei->pos, gnumeric_err_NUM);
+               goto out;
+       }
date = xl ? coup_cd_xl (settlement, maturity, freq, next) : coup_cd (settlement, maturity, freq, eom, next); @@ -419,7 +422,8 @@ gnumeric_accrint (FunctionEvalInfo *ei, goto out;
        }
- if (basis < 0 || basis > 4 || (freq != 1 && freq != 2 && freq != 4)
+        if (!is_valid_basis (basis)
+           || !is_valid_freq (freq)
            || g_date_compare (settlement, first_interest) > 0
            || g_date_compare (first_interest, maturity) < 0) {
                result = value_new_error (ei->pos, gnumeric_err_NUM);
@@ -429,8 +433,7 @@ gnumeric_accrint (FunctionEvalInfo *ei, a = days_monthly_basis (argv[0], argv[2], basis);
        d = annual_year_basis (argv[0], basis);
- if (a < 0 || d <= 0 || par <= 0 || rate <= 0 || basis < 0 || basis > 4
-           || freq == 0) {
+       if (a < 0 || d <= 0 || par <= 0 || rate <= 0) {
                result = value_new_error (ei->pos, gnumeric_err_NUM);
                goto out;
        }
@@ -494,7 +497,8 @@ gnumeric_accrintm (FunctionEvalInfo *ei,
        a = days_monthly_basis (argv[0], argv[1], basis);
        d = annual_year_basis (argv[0], basis);
- if (a < 0 || d <= 0 || par <= 0 || rate <= 0 || basis < 0 || basis > 4)
+       if (a < 0 || d <= 0 || par <= 0 || rate <= 0
+           || !is_valid_basis (basis))
                 return value_new_error (ei->pos, gnumeric_err_NUM);
return value_new_float (par * rate * a/d); @@ -554,7 +558,7 @@ gnumeric_intrate (FunctionEvalInfo *ei, a = days_monthly_basis (argv[0], argv[1], basis);
        d = annual_year_basis (argv[0], basis);
- if (basis < 0 || basis > 4 || a <= 0 || d <= 0 || investment == 0)
+       if (!is_valid_basis (basis) || a <= 0 || d <= 0 || investment == 0)
                 return value_new_error (ei->pos, gnumeric_err_NUM);
return value_new_float ((redemption - investment) / investment *
@@ -606,7 +610,7 @@ gnumeric_received (FunctionEvalInfo *ei,
        a = days_monthly_basis (argv[0], argv[1], basis);
        d = annual_year_basis (argv[0], basis);
- if (a <= 0 || d <= 0 || basis < 0 || basis > 4)
+       if (a <= 0 || d <= 0 || !is_valid_basis (basis))
                 return value_new_error (ei->pos, gnumeric_err_NUM);
n = 1.0 - (discount * a/d);
@@ -662,7 +666,7 @@ gnumeric_pricedisc (FunctionEvalInfo *ei
        a = days_monthly_basis (argv[0], argv[1], basis);
        d = annual_year_basis (argv[0], basis);
- if (a <= 0 || d <= 0 || basis < 0 || basis > 4)
+       if (a <= 0 || d <= 0 || !is_valid_basis (basis))
                 return value_new_error (ei->pos, gnumeric_err_NUM);
return value_new_float (redemption - discount * redemption * a/d);
@@ -715,8 +719,8 @@ gnumeric_pricemat (FunctionEvalInfo *ei,
        a   = days_monthly_basis (argv[2], argv[0], basis);
        b   = annual_year_basis (argv[0], basis);
- if (a <= 0 || b <= 0 || dsm <= 0 || dim <= 0 || basis < 0 ||
-           basis > 4)
+       if (a <= 0 || b <= 0 || dsm <= 0 || dim <= 0
+           || !is_valid_basis (basis))
                 return value_new_error (ei->pos, gnumeric_err_NUM);
n = 1 + (dsm/b * yield);
@@ -771,7 +775,7 @@ gnumeric_disc (FunctionEvalInfo *ei, Val
        b = annual_year_basis (argv[0], basis);
        dsm = days_monthly_basis (argv[0], argv[1], basis);
- if (dsm <= 0 || b <= 0 || dsm <= 0 || basis < 0 || basis > 4
+       if (dsm <= 0 || b <= 0 || dsm <= 0 || !is_valid_basis (basis)
            || redemption == 0)
                 return value_new_error (ei->pos, gnumeric_err_NUM);
@@ -2318,7 +2322,8 @@ gnumeric_price (FunctionEvalInfo *ei, Va
                goto out;
        }
- if (basis < 0 || basis > 4 || (freq != 1 && freq != 2 && freq != 4)
+        if (!is_valid_basis (basis)
+           || !is_valid_freq (freq)
             || g_date_compare (settlement, maturity) > 0) {
                result = value_new_error (ei->pos, gnumeric_err_NUM);
                goto out;
@@ -2406,7 +2411,8 @@ gnumeric_yield (FunctionEvalInfo *ei, Va
                goto out;
        }
- if (basis < 0 || basis > 4 || (freq != 1 && freq != 2 && freq != 4)
+        if (!is_valid_basis (basis)
+           || !is_valid_freq (freq)
             || g_date_compare (settlement, maturity) > 0) {
                result = value_new_error (ei->pos, gnumeric_err_NUM);
                goto out;
@@ -2575,7 +2581,8 @@ gnumeric_oddfprice (FunctionEvalInfo *ei
                goto out;
        }
- if (basis < 0 || basis > 4 || (freq != 1 && freq != 2 && freq != 4)
+        if (!is_valid_basis (basis)
+           || !is_valid_freq (freq)
             || g_date_compare (issue, settlement) > 0
            || g_date_compare (settlement, first_coupon) > 0
            || g_date_compare (first_coupon, maturity) > 0) {
@@ -2858,18 +2865,19 @@ gnumeric_coupdaybs (FunctionEvalInfo *ei
        }
if (xl) {
-               if (basis < 0 || basis > 4 || (freq != 1 && freq != 2 && freq != 4)
+               if (!is_valid_basis (basis)
+                   || !is_valid_freq (freq)
                    || g_date_compare (settlement, maturity) >= 0) {
                        result = value_new_error (ei->pos, gnumeric_err_NUM);
                        goto out;
                }
        }
-       else
-               if (basis < 0 || basis > 5 || (freq == 0) || (12 % freq != 0)
-                   || g_date_compare (settlement, maturity) > 0) {
-                       result = value_new_error (ei->pos, gnumeric_err_NUM);
-                       goto out;
-               }
+       else if (!is_valid_basis (basis)
+                || !is_valid_freq (freq)
+                || g_date_compare (settlement, maturity) > 0) {
+               result = value_new_error (ei->pos, gnumeric_err_NUM);
+               goto out;
+       }
result = value_new_int (coupdaybs (settlement, maturity, freq, basis, eom, xl)); @@ -2942,18 +2950,19 @@ gnumeric_coupdays (FunctionEvalInfo *ei,
        }
if (xl) {
-               if (basis < 0 || basis > 4 || (freq != 1 && freq != 2 && freq != 4)
+               if (!is_valid_basis (basis)
+                   || !is_valid_freq (freq)
                    || g_date_compare (settlement, maturity) >= 0) {
                        result = value_new_error (ei->pos, gnumeric_err_NUM);
                        goto out;
                }
        }
-       else
-               if (basis < 0 || basis > 5 || (freq == 0) || (12 % freq != 0)
-                   || g_date_compare (settlement, maturity) > 0) {
-                       result = value_new_error (ei->pos, gnumeric_err_NUM);
-                       goto out;
-               }
+       else if (!is_valid_basis (basis)
+                || !is_valid_freq (freq)
+                || g_date_compare (settlement, maturity) > 0) {
+               result = value_new_error (ei->pos, gnumeric_err_NUM);
+               goto out;
+       }
result = value_new_float (coupdays (settlement, maturity, freq, basis, eom, xl)); @@ -3028,18 +3037,19 @@ gnumeric_coupdaysnc (FunctionEvalInfo *e
        }
if (xl) {
-               if (basis < 0 || basis > 4 || (freq != 1 && freq != 2 && freq != 4)
+               if (!is_valid_basis (basis)
+                   || !is_valid_freq (freq)
                    || g_date_compare (settlement, maturity) >= 0) {
                        result = value_new_error (ei->pos, gnumeric_err_NUM);
                        goto out;
                }
        }
-       else
-               if (basis < 0 || basis > 5 || (freq == 0) || (12 % freq != 0)
-                   || g_date_compare (settlement, maturity) > 0) {
-                       result = value_new_error (ei->pos, gnumeric_err_NUM);
-                       goto out;
-               }
+       else if (!is_valid_basis (basis)
+                || !is_valid_freq (freq)
+                || g_date_compare (settlement, maturity) > 0) {
+               result = value_new_error (ei->pos, gnumeric_err_NUM);
+               goto out;
+       }
result = value_new_int (coupdaysnc (settlement, maturity, freq, basis, eom, xl)); @@ -3191,7 +3201,8 @@ gnumeric_coupnum (FunctionEvalInfo *ei, goto out;
        }
- if (basis < 0 || basis > 4 || (freq != 1 && freq != 2 && freq != 4)
+       if (!is_valid_basis (basis)
+           || !is_valid_freq (freq)
            || g_date_compare (settlement, maturity) > 0) {
                result = value_new_error (ei->pos, gnumeric_err_NUM);
                goto out;
_______________________________________________
gnumeric-list mailing list
gnumeric-list gnome org
http://mail.gnome.org/mailman/listinfo/gnumeric-list




--
Prof. Dr. Andreas J. Guelzow
http://www.math.concordia.ab.ca/aguelzow




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]