31 lines
911 B
Plaintext
31 lines
911 B
Plaintext
#include "ass_funs.h"
|
|
namespace AssFuns {
|
|
SlipsReturn SlipsCheck(const vector<double>& data, const double& th) {
|
|
SlipsReturn res = {0, 0};
|
|
size_t data_num = data.size();
|
|
if (data_num < 3) {
|
|
return res;
|
|
}
|
|
double data_sum = 0;
|
|
double data_max = data[0];
|
|
double data_min = data[0];
|
|
for (double item : data) {
|
|
data_sum += item;
|
|
data_max = std::max(data_max, item);
|
|
data_min = std::min(data_min, item);
|
|
}
|
|
double data_ave = (data_sum - data_max - data_min) / double(data_num - 2);
|
|
double diff_max =
|
|
std::max(fabs(data_max - data_ave), fabs(data_max - data_ave));
|
|
for (int i = 0; i < data_num; i++) {
|
|
double diff_now = fabs(data[i] - data_ave);
|
|
if (diff_now > fabs(data_ave) * th &&
|
|
fabs(diff_now - diff_max) < std::numeric_limits<double>::epsilon()) {
|
|
res[0] = 1;
|
|
res[1] = i;
|
|
return res;
|
|
}
|
|
}
|
|
return res;
|
|
}
|
|
} // namespace AssFuns |