CAMLprim value ml_gsl_ran_sample(value rng, value src, value dest) { if(Tag_val(src) == Double_array_tag) gsl_ran_sample(Rng_val(rng), Double_array_val(dest), Double_array_length(dest), Double_array_val(src), Double_array_length(src), sizeof(double)); else gsl_ran_sample(Rng_val(rng), (value *)dest, Array_length(dest), (value *)src, Array_length(src), sizeof(value)); return Val_unit; }
void test_shuffle(void){ int original[SIZE] = {1,2,3,4}; int to_be_shuffled[SIZE] = {1,2,3,4}; int draws[5]; gsl_ran_sample(rng, draws, 5, original, SIZE, sizeof(int)); printf("gsl_ran_sample\t[%d,%d,%d,%d]\t%d\t[%d,%d,%d,%d,%d]\n", original[0], original[1], original[2], original[3], 5, draws[0], draws[1], draws[2], draws[3], draws[4] ); gsl_ran_choose(rng, draws, 3, original, SIZE, sizeof(int)); printf("gsl_ran_choose\t[%d,%d,%d,%d]\t%d\t[%d,%d,%d]\n", original[0], original[1], original[2], original[3], 3, draws[0], draws[1], draws[2] ); gsl_ran_shuffle(rng, to_be_shuffled, SIZE, sizeof(int)); printf("gsl_ran_shuffle\t[%d,%d,%d,%d]\t[%d,%d,%d,%d]\n", original[0], original[1], original[2], original[3], to_be_shuffled[0], to_be_shuffled[1], to_be_shuffled[2], to_be_shuffled[3] ); }
void samp_k_from_n (int k, int n, int * a) { printf("\nI got further.\n\n"); int b[n]; static gsl_rng *restrict r = NULL; if(r == NULL) { // First call to this function, setup RNG gsl_rng_env_setup(); r = gsl_rng_alloc(gsl_rng_mt19937); r = gsl_rng_alloc(0); } /* sample k objects from an array of size n with replacement */ printf("\n n = %d\n", n); printf("\n\nZ\n\n"); for (int i = 0; i < n; i++) { b[i] = i; } printf("\n\nA\n\n"); gsl_ran_sample (r, a, k, b, n, sizeof(int)); printf("\n\nA2\n\n"); }