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