void run_triangle(unsigned long max_bits, double ratio) { int max_iter = (int) ceil(log((double) max_bits) / log(ratio)); unsigned long last_length = 0; unsigned long i; for (i = 0; i <= max_iter; i++) { unsigned long length = (unsigned long) floor(powl(ratio, i)); if (length != last_length) { last_length = length; unsigned long last_bits = 0; unsigned long j; for (j = 0; j <= max_iter; j++) { unsigned long bits = (unsigned long) floor(powl(ratio, j)); if (bits != last_bits) { last_bits = bits; if (bits * length < max_bits) prof2d_sample(length, bits, NULL); } } } } }
void profDriver_zmod_poly_factor(char* params) { unsigned long n, n_max, j, old_bits; double n_ratio; sscanf(params, "%ld %lf", &n_max, &n_ratio); unsigned long last_n = 0; prof2d_set_sampler(sample_zmod_poly_factor); int max_iter = (int) ceil(log((double) n_max) / log(n_ratio)); for (unsigned long i = 0; i < max_iter; i++) { n = (unsigned long) floor(pow(n_ratio, i)); if (n != last_n) { last_n = n; for (ulong bits = 1, j = 0; bits < FLINT_BITS; j++) { prof2d_sample(n, bits, NULL); old_bits = bits; while (old_bits == bits) {bits = (ulong) floor(pow(n_ratio, j)); j++;} j--; } } } }
void profDriver_zmod_poly_sqr_classical(char* params) { unsigned long n, n_min, n_max; double n_ratio; sscanf(params, "%ld %ld %lf", &n_min, &n_max, &n_ratio); unsigned long last_n = 0; prof2d_set_sampler(sample_zmod_poly_sqr_classical); int max_iter = (int) ceil(log((double) n_max) / log(n_ratio)); int min_iter = (int) ceil(log((double) n_min) / log(n_ratio)); for (unsigned long i = min_iter; i < max_iter; i++) { n = (unsigned long) floor(pow(n_ratio, i)); if (n != last_n) { last_n = n; for (unsigned long bits = 2; bits < 64; bits++) { unsigned long log_length = 0; while ((1L<<log_length)<n) log_length++; if (2*bits + log_length <= 2*FLINT_BITS) prof2d_sample(n, bits, NULL); } } } }
void profDriver_zmod_poly_divrem_newton_single(char* params) { unsigned long n, bits; sscanf(params, "%ld %ld", &bits, &n); prof2d_set_sampler(sample_zmod_poly_divrem_newton); prof2d_sample(n, bits, NULL); }
void profDriver_zmod_poly_gcd_hgcd_single(char* params) { unsigned long bits, n; sscanf(params, "%ld %ld", &n, &bits); prof2d_set_sampler(sample_zmod_poly_gcd_hgcd); prof2d_sample(n, bits, NULL); }
void run_block(ulong max_length, double ratio) { int max_iter = (int) ceil(log((double) max_length) / log(ratio)); ulong last_length = 0; for (ulong i = 0; i <= max_iter; i++) { ulong length = (ulong) floor(pow(ratio, i)); if (length != last_length) { last_length = length; ulong m = ceil_log2(length); for (ulong bits = 1; bits <= 31; bits++) { if (m + 2*bits <= FLINT_BITS - 2) prof2d_sample(length, bits, NULL); } } } }