Skip to content
Snippets Groups Projects
Commit cef5510a authored by Carl Philipp Klemm's avatar Carl Philipp Klemm
Browse files

kiss_median: fix issue where the median was incorrect when the input data is...

kiss_median: fix issue where the median was incorrect when the input data is not sorted or if it has length 1
parent 33c9c79d
No related branches found
No related tags found
No related merge requests found
......@@ -508,15 +508,18 @@ static int kiss_cmp_float(const void *x, const void *y)
float *a = (float*)x;
float *b = (float*)y;
if(a < b)
return -1;
if(b < a)
if(*a < *b)
return 1;
if(*b < *a)
return -1;
return 0;
}
float kiss_median(float *data, size_t input_length)
{
if(input_length == 1)
return data[0];
float *data_cpy = malloc(input_length*sizeof(*data));
memcpy(data_cpy, data, input_length*sizeof(*data));
qsort(data_cpy, input_length, sizeof(*data_cpy), kiss_cmp_float);
......
......@@ -281,12 +281,30 @@ static bool testMedian()
if(!eis::fvalueEq(median, medianRef))
{
ret = false;
std::cout<<"Grads\n";
for(float val : grads)
std::cout<<val<<'\n';
std::cout<<median<<" is not "<<medianRef<<'\n';
}
return ret;
}
bool testTranslate()
{
const char *model = "r-rc(r-w)";
char *cdc = kiss_eis_to_cdc(model);
char *relaxis = kiss_eis_to_relaxis(model);
std::cout<<"Eis: "<<model<<'\n';
std::cout<<"CDC: "<<cdc<<'\n';
std::cout<<"RelaxIS: "<<relaxis<<'\n';
free(cdc);
free(relaxis);
return true;
}
int main(int argc, char** argv)
{
if(argc < 2)
......@@ -339,4 +357,10 @@ int main(int argc, char** argv)
std::cerr<<"kiss_filter_spectra not working\n";
return 7;
}
if(!testTranslate())
{
std::cerr<<"kiss_eis_to_cdc or kiss_eis_to_relaxis not working\n";
return 8;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment