diff --git a/utils/regr/corr.cpp b/utils/regr/corr.cpp index 2a50527f2..71fb41d1a 100644 --- a/utils/regr/corr.cpp +++ b/utils/regr/corr.cpp @@ -218,23 +218,32 @@ mcsv1_UDAF::ReturnCode corr::dropValue(mcsv1Context* context, ColumnDatum* valsD long double cxyPrev = data->cxy; --data->cnt; uint64_t cnt = data->cnt; + if (cnt == 0) + { + data->avgx = 0; + data->avgy = 0; + data->varx = 0; + data->vary = 0; + data->cxy = 0; + } + else + { + long double dx = valx - avgxPrev; + long double dy = valy - avgyPrev; - long double dx = valx - avgxPrev; - long double dy = valy - avgyPrev; + avgyPrev -= dy / cnt; + avgxPrev -= dx / cnt; - avgyPrev -= dy / cnt; - avgxPrev -= dx / cnt; + varxPrev -= dx * (valx - avgxPrev); + varyPrev -= dy * (valy - avgyPrev); - varxPrev -= dx * (valx - avgxPrev); - varyPrev -= dy * (valy - avgyPrev); - - cxyPrev -= dx * (valy - avgyPrev); - - data->avgx = avgxPrev; - data->avgy = avgyPrev; - data->varx = varxPrev; - data->vary = varyPrev; - data->cxy = cxyPrev; + cxyPrev -= dx * (valy - avgyPrev); + data->avgx = avgxPrev; + data->avgy = avgyPrev; + data->varx = varxPrev; + data->vary = varyPrev; + data->cxy = cxyPrev; + } return mcsv1_UDAF::SUCCESS; } diff --git a/utils/regr/covar_pop.cpp b/utils/regr/covar_pop.cpp index 392edf0ed..e0e2cb455 100644 --- a/utils/regr/covar_pop.cpp +++ b/utils/regr/covar_pop.cpp @@ -169,15 +169,23 @@ mcsv1_UDAF::ReturnCode covar_pop::dropValue(mcsv1Context* context, ColumnDatum* long double cxyPrev = data->cxy; --data->cnt; uint64_t cnt = data->cnt; - long double dx = valx - avgxPrev; + if (cnt == 0) + { + data->avgx = 0; + data->avgy = 0; + data->cxy = 0; + } + else + { + long double dx = valx - avgxPrev; - avgyPrev -= (valy - avgyPrev) / cnt; - avgxPrev -= dx / cnt; - cxyPrev -= dx * (valy - avgyPrev); - - data->avgx = avgxPrev; - data->avgy = avgyPrev; - data->cxy = cxyPrev; + avgyPrev -= (valy - avgyPrev) / cnt; + avgxPrev -= dx / cnt; + cxyPrev -= dx * (valy - avgyPrev); + data->avgx = avgxPrev; + data->avgy = avgyPrev; + data->cxy = cxyPrev; + } return mcsv1_UDAF::SUCCESS; } diff --git a/utils/regr/covar_samp.cpp b/utils/regr/covar_samp.cpp index d079221e8..c2b4a82da 100644 --- a/utils/regr/covar_samp.cpp +++ b/utils/regr/covar_samp.cpp @@ -173,14 +173,23 @@ mcsv1_UDAF::ReturnCode covar_samp::dropValue(mcsv1Context* context, ColumnDatum* long double cxyPrev = data->cxy; --data->cnt; uint64_t cnt = data->cnt; - long double dx = valx - avgxPrev; + if (cnt == 0) + { + data->avgx = 0; + data->avgy = 0; + data->cxy = 0; + } + else + { + long double dx = valx - avgxPrev; - avgyPrev -= (valy - avgyPrev) / cnt; - avgxPrev -= dx / cnt; - cxyPrev -= dx * (valy - avgyPrev); + avgyPrev -= (valy - avgyPrev) / cnt; + avgxPrev -= dx / cnt; + cxyPrev -= dx * (valy - avgyPrev); - data->avgx = avgxPrev; - data->avgy = avgyPrev; - data->cxy = cxyPrev; + data->avgx = avgxPrev; + data->avgy = avgyPrev; + data->cxy = cxyPrev; + } return mcsv1_UDAF::SUCCESS; } diff --git a/utils/regr/regr_intercept.cpp b/utils/regr/regr_intercept.cpp index 559ccbd80..b40a9dccd 100644 --- a/utils/regr/regr_intercept.cpp +++ b/utils/regr/regr_intercept.cpp @@ -196,21 +196,29 @@ mcsv1_UDAF::ReturnCode regr_intercept::dropValue(mcsv1Context* context, ColumnDa long double cxyPrev = data->cxy; --data->cnt; uint64_t cnt = data->cnt; + if (cnt == 0) + { + data->avgx = 0; + data->avgy = 0; + data->cx = 0; + data->cxy = 0; + } + else + { + long double dx = valx - avgxPrev; + long double dy = valy - avgyPrev; - long double dx = valx - avgxPrev; - long double dy = valy - avgyPrev; + avgyPrev -= dy / cnt; + avgxPrev -= dx / cnt; - avgyPrev -= dy / cnt; - avgxPrev -= dx / cnt; + cxPrev -= dx * (valx - avgxPrev); - cxPrev -= dx * (valx - avgxPrev); - - cxyPrev -= dx * (valy - avgyPrev); - - data->avgx = avgxPrev; - data->avgy = avgyPrev; - data->cx = cxPrev; - data->cxy = cxyPrev; + cxyPrev -= dx * (valy - avgyPrev); + data->avgx = avgxPrev; + data->avgy = avgyPrev; + data->cx = cxPrev; + data->cxy = cxyPrev; + } return mcsv1_UDAF::SUCCESS; } diff --git a/utils/regr/regr_r2.cpp b/utils/regr/regr_r2.cpp index 71ec38ccf..313c43d38 100644 --- a/utils/regr/regr_r2.cpp +++ b/utils/regr/regr_r2.cpp @@ -218,23 +218,32 @@ mcsv1_UDAF::ReturnCode regr_r2::dropValue(mcsv1Context* context, ColumnDatum* va long double cxyPrev = data->cxy; --data->cnt; uint64_t cnt = data->cnt; + if (cnt == 0) + { + data->avgx = 0; + data->avgy = 0; + data->varx = 0; + data->vary = 0; + data->cxy = 0; + } + else + { + long double dx = valx - avgxPrev; + long double dy = valy - avgyPrev; - long double dx = valx - avgxPrev; - long double dy = valy - avgyPrev; + avgyPrev -= dy / cnt; + avgxPrev -= dx / cnt; - avgyPrev -= dy / cnt; - avgxPrev -= dx / cnt; + varxPrev -= dx * (valx - avgxPrev); + varyPrev -= dy * (valy - avgyPrev); - varxPrev -= dx * (valx - avgxPrev); - varyPrev -= dy * (valy - avgyPrev); - - cxyPrev -= dx * (valy - avgyPrev); - - data->avgx = avgxPrev; - data->avgy = avgyPrev; - data->varx = varxPrev; - data->vary = varyPrev; - data->cxy = cxyPrev; + cxyPrev -= dx * (valy - avgyPrev); + data->avgx = avgxPrev; + data->avgy = avgyPrev; + data->varx = varxPrev; + data->vary = varyPrev; + data->cxy = cxyPrev; + } return mcsv1_UDAF::SUCCESS; } diff --git a/utils/regr/regr_slope.cpp b/utils/regr/regr_slope.cpp index 4575f39fa..b72ffb8e6 100644 --- a/utils/regr/regr_slope.cpp +++ b/utils/regr/regr_slope.cpp @@ -193,21 +193,29 @@ mcsv1_UDAF::ReturnCode regr_slope::dropValue(mcsv1Context* context, ColumnDatum* long double cxyPrev = data->cxy; --data->cnt; uint64_t cnt = data->cnt; + if (cnt == 0) + { + data->avgx = 0; + data->avgy = 0; + data->cx = 0; + data->cxy = 0; + } + else + { + long double dx = valx - avgxPrev; + long double dy = valy - avgyPrev; - long double dx = valx - avgxPrev; - long double dy = valy - avgyPrev; + avgyPrev -= dy / cnt; + avgxPrev -= dx / cnt; - avgyPrev -= dy / cnt; - avgxPrev -= dx / cnt; + cxPrev -= dx * (valx - avgxPrev); - cxPrev -= dx * (valx - avgxPrev); - - cxyPrev -= dx * (valy - avgyPrev); - - data->avgx = avgxPrev; - data->avgy = avgyPrev; - data->cx = cxPrev; - data->cxy = cxyPrev; + cxyPrev -= dx * (valy - avgyPrev); + data->avgx = avgxPrev; + data->avgy = avgyPrev; + data->cx = cxPrev; + data->cxy = cxyPrev; + } return mcsv1_UDAF::SUCCESS; } diff --git a/utils/regr/regr_sxx.cpp b/utils/regr/regr_sxx.cpp index 0d6d3abe4..fb1a55cad 100644 --- a/utils/regr/regr_sxx.cpp +++ b/utils/regr/regr_sxx.cpp @@ -157,11 +157,18 @@ mcsv1_UDAF::ReturnCode regr_sxx::dropValue(mcsv1Context* context, ColumnDatum* v long double cxPrev = data->cx; --data->cnt; uint64_t cnt = data->cnt; - long double dx = valx - avgxPrev; - avgxPrev -= dx / cnt; - cxPrev -= dx * (valx - avgxPrev); - data->avgx = avgxPrev; - data->cx = cxPrev; - + if (cnt == 0) + { + data->avgx = 0; + data->cx = 0; + } + else + { + long double dx = valx - avgxPrev; + avgxPrev -= dx / cnt; + cxPrev -= dx * (valx - avgxPrev); + data->avgx = avgxPrev; + data->cx = cxPrev; + } return mcsv1_UDAF::SUCCESS; } diff --git a/utils/regr/regr_sxy.cpp b/utils/regr/regr_sxy.cpp index 607e78d53..a2761030b 100644 --- a/utils/regr/regr_sxy.cpp +++ b/utils/regr/regr_sxy.cpp @@ -168,15 +168,23 @@ mcsv1_UDAF::ReturnCode regr_sxy::dropValue(mcsv1Context* context, ColumnDatum* v long double cxyPrev = data->cxy; --data->cnt; uint64_t cnt = data->cnt; - long double dx = valx - avgxPrev; + if (cnt == 0) + { + data->avgx = 0; + data->avgy = 0; + data->cxy = 0; + } + else + { + long double dx = valx - avgxPrev; - avgyPrev -= (valy - avgyPrev) / cnt; - avgxPrev -= dx / cnt; - cxyPrev -= dx * (valy - avgyPrev); - - data->avgx = avgxPrev; - data->avgy = avgyPrev; - data->cxy = cxyPrev; + avgyPrev -= (valy - avgyPrev) / cnt; + avgxPrev -= dx / cnt; + cxyPrev -= dx * (valy - avgyPrev); + data->avgx = avgxPrev; + data->avgy = avgyPrev; + data->cxy = cxyPrev; + } return mcsv1_UDAF::SUCCESS; } diff --git a/utils/regr/regr_syy.cpp b/utils/regr/regr_syy.cpp index 78113a485..3ac51a0c6 100644 --- a/utils/regr/regr_syy.cpp +++ b/utils/regr/regr_syy.cpp @@ -158,11 +158,18 @@ mcsv1_UDAF::ReturnCode regr_syy::dropValue(mcsv1Context* context, ColumnDatum* v long double cyPrev = data->cy; --data->cnt; uint64_t cnt = data->cnt; - long double dy = valy - avgyPrev; - avgyPrev -= dy / cnt; - cyPrev -= dy * (valy - avgyPrev); - data->avgy = avgyPrev; - data->cy = cyPrev; - + if (cnt == 0) + { + data->avgy = 0; + data->cx = 0; + } + else + { + long double dy = valy - avgyPrev; + avgyPrev -= dy / cnt; + cyPrev -= dy * (valy - avgyPrev); + data->avgy = avgyPrev; + data->cy = cyPrev; + } return mcsv1_UDAF::SUCCESS; }