Changeset: c88f4dbbdf81 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c88f4dbbdf81
Modified Files:
        gdk/gdk_analytic.h
        gdk/gdk_analytic_func.c
        sql/backends/monet5/sql_rank.c
Branch: statistics-analytics
Log Message:

Convert issample parameter into a constant


diffs (156 lines):

diff --git a/gdk/gdk_analytic.h b/gdk/gdk_analytic.h
--- a/gdk/gdk_analytic.h
+++ b/gdk/gdk_analytic.h
@@ -38,7 +38,9 @@ gdk_export gdk_return GDKanalyticalsum(B
 gdk_export gdk_return GDKanalyticalprod(BAT *r, BAT *b, BAT *s, BAT *e, int 
tp1, int tp2);
 gdk_export gdk_return GDKanalyticalavg(BAT *r, BAT *b, BAT *s, BAT *e, int 
tpe);
 
-gdk_export gdk_return GDKanalytical_stddev(BAT *r, BAT *b, BAT *s, BAT *e, int 
tpe, bool issample);
-gdk_export gdk_return GDKanalytical_variance(BAT *r, BAT *b, BAT *s, BAT *e, 
int tpe, bool issample);
+gdk_export gdk_return GDKanalytical_stddev_samp(BAT *r, BAT *b, BAT *s, BAT 
*e, int tpe);
+gdk_export gdk_return GDKanalytical_stddev_pop(BAT *r, BAT *b, BAT *s, BAT *e, 
int tpe);
+gdk_export gdk_return GDKanalytical_variance_samp(BAT *r, BAT *b, BAT *s, BAT 
*e, int tpe);
+gdk_export gdk_return GDKanalytical_variance_pop(BAT *r, BAT *b, BAT *s, BAT 
*e, int tpe);
 
 #endif //_GDK_ANALYTIC_H_
diff --git a/gdk/gdk_analytic_func.c b/gdk/gdk_analytic_func.c
--- a/gdk/gdk_analytic_func.c
+++ b/gdk/gdk_analytic_func.c
@@ -1721,7 +1721,7 @@ GDKanalyticalavg(BAT *r, BAT *b, BAT *s,
        return GDK_SUCCEED;
 }
 
-#define ANALYTICAL_STDEV_VARIANCE_CALC(TPE, OP)                        \
+#define ANALYTICAL_STDEV_VARIANCE_CALC(TPE, SAMPLE, OP)        \
        do {                                                            \
                TPE *bp = (TPE*)Tloc(b, 0), *bs, *be, v;                \
                for (; i < cnt; i++, rb++) {                            \
@@ -1736,7 +1736,7 @@ GDKanalyticalavg(BAT *r, BAT *b, BAT *s,
                                mean += delta / n;              \
                                m2 += delta * ((dbl) v - mean); \
                        }                                               \
-                       if (n > sample) { \
+                       if (n > SAMPLE) { \
                                *rb = OP; \
                        } else { \
                                *rb = dbl_nil; \
@@ -1749,20 +1749,20 @@ GDKanalyticalavg(BAT *r, BAT *b, BAT *s,
        } while (0)
 
 #ifdef HAVE_HGE
-#define ANALYTICAL_STDEV_VARIANCE_LIMIT(OP) \
+#define ANALYTICAL_STDEV_VARIANCE_LIMIT(SAMPLE, OP) \
        case TYPE_hge: \
-               ANALYTICAL_STDEV_VARIANCE_CALC(hge, OP); \
+               ANALYTICAL_STDEV_VARIANCE_CALC(hge, SAMPLE, OP); \
        break;
 #else
-#define ANALYTICAL_STDEV_VARIANCE_LIMIT(OP)
+#define ANALYTICAL_STDEV_VARIANCE_LIMIT(SAMPLE, OP)
 #endif
 
-#define GDK_ANALYTICAL_STDEV_VARIANCE(NAME, OP) \
+#define GDK_ANALYTICAL_STDEV_VARIANCE(NAME, SAMPLE, OP) \
 gdk_return \
-GDKanalytical_##NAME(BAT *r, BAT *b, BAT *s, BAT *e, int tpe, bool issample) \
+GDKanalytical_##NAME(BAT *r, BAT *b, BAT *s, BAT *e, int tpe) \
 { \
        bool has_nils = false; \
-       BUN i = 0, cnt = BATcount(b), n = 0, sample = (BUN) issample; \
+       BUN i = 0, cnt = BATcount(b), n = 0; \
        lng *restrict start, *restrict end; \
        dbl *restrict rb = (dbl *) Tloc(r, 0), mean = 0, m2 = 0, delta; \
  \
@@ -1772,23 +1772,23 @@ GDKanalytical_##NAME(BAT *r, BAT *b, BAT
  \
        switch (tpe) { \
        case TYPE_bte: \
-               ANALYTICAL_STDEV_VARIANCE_CALC(bte, OP); \
+               ANALYTICAL_STDEV_VARIANCE_CALC(bte, SAMPLE, OP); \
                break; \
        case TYPE_sht: \
-               ANALYTICAL_STDEV_VARIANCE_CALC(sht, OP); \
+               ANALYTICAL_STDEV_VARIANCE_CALC(sht, SAMPLE, OP); \
                break; \
        case TYPE_int: \
-               ANALYTICAL_STDEV_VARIANCE_CALC(int, OP); \
+               ANALYTICAL_STDEV_VARIANCE_CALC(int, SAMPLE, OP); \
                break; \
        case TYPE_lng: \
-               ANALYTICAL_STDEV_VARIANCE_CALC(lng, OP); \
+               ANALYTICAL_STDEV_VARIANCE_CALC(lng, SAMPLE, OP); \
                break; \
-       ANALYTICAL_STDEV_VARIANCE_LIMIT(OP) \
+       ANALYTICAL_STDEV_VARIANCE_LIMIT(SAMPLE, OP) \
        case TYPE_flt:\
-               ANALYTICAL_STDEV_VARIANCE_CALC(flt, OP); \
+               ANALYTICAL_STDEV_VARIANCE_CALC(flt, SAMPLE, OP); \
                break; \
        case TYPE_dbl: \
-               ANALYTICAL_STDEV_VARIANCE_CALC(dbl, OP); \
+               ANALYTICAL_STDEV_VARIANCE_CALC(dbl, SAMPLE, OP); \
                break; \
        default: \
                GDKerror("%s: average of type %s unsupported.\n", __func__, 
ATOMname(tpe)); \
@@ -1800,5 +1800,7 @@ GDKanalytical_##NAME(BAT *r, BAT *b, BAT
        return GDK_SUCCEED; \
 }
 
-GDK_ANALYTICAL_STDEV_VARIANCE(stddev, sqrt(m2 / (n - sample)))
-GDK_ANALYTICAL_STDEV_VARIANCE(variance, m2 / (n - sample))
+GDK_ANALYTICAL_STDEV_VARIANCE(stddev_samp, 1, sqrt(m2 / (n - 1)))
+GDK_ANALYTICAL_STDEV_VARIANCE(stddev_pop, 0, sqrt(m2 / (n - 0)))
+GDK_ANALYTICAL_STDEV_VARIANCE(variance_samp, 1, m2 / (n - 1))
+GDK_ANALYTICAL_STDEV_VARIANCE(variance_pop, 0, m2 / (n - 0))
diff --git a/sql/backends/monet5/sql_rank.c b/sql/backends/monet5/sql_rank.c
--- a/sql/backends/monet5/sql_rank.c
+++ b/sql/backends/monet5/sql_rank.c
@@ -1539,7 +1539,7 @@ SQLavg(Client cntxt, MalBlkPtr mb, MalSt
 
 static str
 do_stddev_and_variance(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci, const char* op, const char* err, 
-                                          bool issample, gdk_return 
(*func)(BAT *, BAT *, BAT *, BAT *, int, bool))
+                                          gdk_return (*func)(BAT *, BAT *, BAT 
*, BAT *, int))
 {
        BAT *r, *b, *s, *e;
        str msg = SQLanalytics_args(&r, &b, &s, &e, cntxt, mb, stk, pci, 
TYPE_dbl, op, err);
@@ -1554,7 +1554,7 @@ do_stddev_and_variance(Client cntxt, Mal
        if (b) {
                bat *res = getArgReference_bat(stk, pci, 0);
 
-               gdk_res = func(r, b, s, e, tpe, issample);
+               gdk_res = func(r, b, s, e, tpe);
                BBPunfix(b->batCacheid);
                if (s) BBPunfix(s->batCacheid);
                if (e) BBPunfix(e->batCacheid);
@@ -1588,26 +1588,26 @@ str
 SQLstddev_samp(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        return do_stddev_and_variance(cntxt, mb, stk, pci, "sql.stdev", 
SQLSTATE(42000) "stddev(:any_1,:lng,:lng)",
-                                                                 true, 
GDKanalytical_stddev);
+                                                                 
GDKanalytical_stddev_samp);
 }
 
 str
 SQLstddev_pop(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        return do_stddev_and_variance(cntxt, mb, stk, pci, "sql.stdevp", 
SQLSTATE(42000) "stdevp(:any_1,:lng,:lng)",
-                                                                 false, 
GDKanalytical_stddev);
+                                                                 
GDKanalytical_stddev_pop);
 }
 
 str
 SQLvar_samp(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        return do_stddev_and_variance(cntxt, mb, stk, pci, "sql.variance", 
SQLSTATE(42000) "variance(:any_1,:lng,:lng)",
-                                                                 true, 
GDKanalytical_variance);
+                                                                 
GDKanalytical_variance_samp);
 }
 
 str
 SQLvar_pop(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        return do_stddev_and_variance(cntxt, mb, stk, pci, "sql.variancep", 
SQLSTATE(42000) "variancep(:any_1,:lng,:lng)",
-                                                                 false, 
GDKanalytical_variance);
+                                                                 
GDKanalytical_variance_pop);
 }
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to