// #define T_TEST_DISCARD_OUTLIERS int T_test_isRejected(measurement_t *samples,size_t len) { double t; struct standard_deviation X1; struct standard_deviation X2; // Statistics over the samples compute_standard_deviation(samples,len,0,&X1); compute_standard_deviation(samples,len,1,&X2); #ifdef T_TEST_DISCARD_OUTLIERS // Remove outliers { uint32_t k1=stat_discard_outliers(samples,len,0,&X1); uint32_t k2=stat_discard_outliers(samples,len,1,&X2); if ((k1>0 || k2>0) && (verbose>=1)) { if (verbose) diag("Discarded outliers: Group1 %d, Group2 %d, over %lu samples",k1,k2,len); } } #endif // Compute the t statistic t=(X1.M - X2.M) / (sqrt(s_square(&X1)/X1.k)+(s_square(&X2)/X2.k)); t=fabs(t); // Take absolute value // Check against critical value #if PRINT_IN_FILE fprintf(X1.s_file, "avg,, %f\n", X1.M); fprintf(X2.s_file, "avg,, %f\n", X2.M); fclose(X1.s_file); fclose(X2.s_file); #endif if (t>T_TEST_REJECT) { if (verbose) diag("T test failed: T %f, Avg1 %f Sigma1 %f, Avg2 %f Sigma2 %f",t, X1.M,standard_deviation_sigma(&X1), X2.M,standard_deviation_sigma(&X2)); return 1; } return 0; }
void s_square_ref(int *x) { *x = s_square(*x); }
int s_dot_self(vector_t *v) { return s_square(v->x) + s_square(v->y) + s_square(v->z); }
void s_square_out(int x, int *y) { *y = s_square(x); }