int main() { fmpz * num1; fmpz * den1; fmpz_t num2; fmpz_t den2; long n, N; printf("bernoulli_number...."); fflush(stdout); N = 4000; num1 = _fmpz_vec_init(N); den1 = _fmpz_vec_init(N); fmpz_init(num2); fmpz_init(den2); _bernoulli_number_vec_multi_mod(num1, den1, N); for (n = 0; n < N; n++) { bernoulli_number(num2, den2, n); if (!fmpz_equal(num1 + n, num2)) { printf("FAIL: n = %ld, numerator\n", n); printf("vec: "); fmpz_print(num1 + n); printf("\n"); printf("single: "); fmpz_print(num2); printf("\n"); abort(); } if (!fmpz_equal(den1 + n, den2)) { printf("FAIL: n = %ld, denominator\n", n); printf("vec: "); fmpz_print(den1 + n); printf("\n"); printf("single: "); fmpz_print(den2); printf("\n"); abort(); } } _fmpz_vec_clear(num1, N); _fmpz_vec_clear(den1, N); fmpz_clear(num2); fmpz_clear(den2); mpfr_free_cache(); _fmpz_cleanup(); printf("PASS\n"); return 0; }
void _bernoulli_number_vec_recursive(fmpz * num, fmpz * den, long n) { long i, start; fmpz_t t; fmpz_t d; fmpz_init(t); fmpz_init(d); start = FLINT_MIN(BERNOULLI_SMALL_NUMER_LIMIT, n); /* Initial values */ for (i = 0; i < start; i += 2) bernoulli_number(num + i, den + i, i); __ramanujan_even_common_denom(num, den, start, n); /* Odd values */ for (i = 1; i < n; i += 2) bernoulli_number(num + i, den + i, i); fmpz_clear(d); fmpz_clear(t); }
int main() { fmpz * num1; fmpz * den1; fmpz_t num2; fmpz_t den2; long n, N; printf("bernoulli_number...."); fflush(stdout); N = 4000; num1 = _fmpz_vec_init(N); den1 = _fmpz_vec_init(N); fmpz_init(num2); fmpz_init(den2); _bernoulli_number_vec_multi_mod(num1, den1, N); for (n = 0; n < N; n++) { _bernoulli_number(num2, den2, n); if (!fmpz_equal(num1 + n, num2)) { printf("FAIL: n = %ld, numerator\n", n); printf("vec: "); fmpz_print(num1 + n); printf("\n"); printf("single: "); fmpz_print(num2); printf("\n"); abort(); } if (!fmpz_equal(den1 + n, den2)) { printf("FAIL: n = %ld, denominator\n", n); printf("vec: "); fmpz_print(den1 + n); printf("\n"); printf("single: "); fmpz_print(den2); printf("\n"); abort(); } } /* Check non underscore versions */ do { long N = 100; fmpq * x; fmpq_t t; fmpq_init(t); x = flint_malloc(sizeof(fmpq) * N); for (n = 0; n < N; n++) fmpq_init(x + n); bernoulli_number_vec(x, N); for (n = 0; n < N; n++) { bernoulli_number(t, n); if (!fmpq_equal(x + n, t)) { printf("FAIL!: n = %ld\n", n); abort(); } } for (n = 0; n < N; n++) fmpq_clear(x + n); flint_free(x); fmpq_clear(t); } while (0); _fmpz_vec_clear(num1, N); _fmpz_vec_clear(den1, N); fmpz_clear(num2); fmpz_clear(den2); mpfr_free_cache(); _fmpz_cleanup(); printf("PASS\n"); return 0; }