/*!lcc * gcc -O3 %* -lgsl * a.exe * del a.exe */ /* gsl_rstat_median has 2 bugs: * 1. input vector size 5: result wrong unless sorted * 2. input vector size > 5 and even: always wrong * */ #include #include int main(void) { double d1[] { 1 }; double d2[] { 2, 1 }; double d3[] { 2, 3, 1 }; double d4[] { 2, 4, 1, 3 }; double d5[] { 3, 2, 5, 1, 4 }; double d6[] { 3, 5, 1, 2, 4, 6 }; double d7[] { 4, 5, 7, 1, 2, 6, 3 }; double d8[] { 4, 6, 2, 1, 8, 3, 7, 5 }; double* data[8] { d1, d2, d3, d4, d5, d6, d7, d8 }; for (int i=0; i<8; ++i) { gsl_rstat_workspace *rstat_p = gsl_rstat_alloc(); /* add data to rstat accumulator */ for (int j = 0; j < i+1; ++j) { printf("%g ", data[i][j]); gsl_rstat_add(data[i][j], rstat_p); } double median = gsl_rstat_median(rstat_p); double should_be = (i+2.0)/2.0; printf(" median %g %s %g\n", median, median == should_be ? "==" : "!=", should_be); } }