コード例 #1
0
ファイル: init.c プロジェクト: clear731/lattice
void fmpz_poly_q_init(fmpz_poly_q_t rop)
{
    rop->num = flint_malloc(sizeof(fmpz_poly_struct));
    rop->den = flint_malloc(sizeof(fmpz_poly_struct));
    fmpz_poly_init(rop->num);
    fmpz_poly_init(rop->den);
    fmpz_poly_set_si(rop->den, 1);
}
コード例 #2
0
ファイル: set_str.c プロジェクト: clear731/lattice
/**
 * \ingroup  StringConversions
 * 
 * Sets the rational function \c rop to the value specified by the 
 * null-terminated string \c s.
 *
 * This method has now already been somewhat improved and is not very tolerant 
 * in the handling of malformed input.  It expects either legitimate input for 
 * an \c fmpz_poly_t element, or two such inputs separated by a <tt>/</tt> 
 * only, in which case it is also assumed that the second polynomial is 
 * non-zero.
 * 
 * The rational function is brought into canonical form by calling 
 * #fmpz_poly_q_canonicalize() in this function.
 * 
 * Returns \c 0 if the string represents a valid rational function and 
 * \c non-zero otherwise.
 */
int fmpz_poly_q_set_str(fmpz_poly_q_t rop, const char *s)
{
    int ans, i, m;
    size_t len;
    char * numstr;
    
    len = strlen(s);
    
    for (m = 0; m < len; m++)
    {
        if (s[m] == '/')
            break;
    }
    
    if (m == len)
    {
        ans = fmpz_poly_set_str(rop->num, s);
        fmpz_poly_set_si(rop->den, 1);
        return ans;
    }
    else
    {
        numstr = flint_malloc(m + 1);
        if (!numstr)
        {
            flint_printf("Exception (fmpz_poly_q_set_str). Memory allocation failed.\n");
            abort();
        }
        
        for (i = 0; i < m; i++)
            numstr[i] = s[i];
        numstr[i] = '\0';
        
        ans  = fmpz_poly_set_str(rop->num, numstr);
        ans |= fmpz_poly_set_str(rop->den, s + (m + 1));
        if (ans == 0)
            fmpz_poly_q_canonicalise(rop);
        else
            fmpz_poly_q_zero(rop);
        flint_free(numstr);
        return ans;
    }
}
コード例 #3
0
ファイル: t-get_series.c プロジェクト: jwbober/arb
int main()
{
    printf("get_series....");
    fflush(stdout);

    {
        fmpq_t s;
        fmpz_holonomic_t re, de, ans;

        fmpq_init(s);
        fmpz_holonomic_init(re);
        fmpz_holonomic_init(de);
        fmpz_holonomic_init(ans);
        fmpz_holonomic_fit_length(ans, 4);

        fmpq_set_si(s, -7, 3);

        /* exp(x) */
        fmpz_holonomic_fun_set_exp(de);
        fmpz_holonomic_get_series(re, de);
        fmpz_poly_set_si(ans->coeffs + 0, -1);
        fmpz_poly_set_si2(ans->coeffs + 1, 1, 1);
        _fmpz_holonomic_set_length(ans, 2);
        check(re, ans, de);

        /* sin/cos(x) */
        fmpz_holonomic_fun_set_sin_cos(de);
        fmpz_holonomic_get_series(re, de);
        fmpz_poly_set_str(ans->coeffs + 0, "1  1");
        fmpz_poly_set_str(ans->coeffs + 1, "0");
        fmpz_poly_set_str(ans->coeffs + 2, "3  2 3 1");
        _fmpz_holonomic_set_length(ans, 3);
        check(re, ans, de);

        /* log(x) */
        fmpz_holonomic_fun_set_log(de);
        fmpz_holonomic_get_series(re, de);
        fmpz_poly_set_si(ans->coeffs + 0, 1);
        _fmpz_holonomic_set_length(ans, 1);
        check(re, ans, de);

        /* log(s+x) */
        fmpz_holonomic_shift_fmpq(de, de, s);
        fmpz_holonomic_get_series(re, de);
        fmpz_poly_set_str(ans->coeffs + 0, "2  0 -3");
        fmpz_poly_set_str(ans->coeffs + 1, "2  7 7");
        _fmpz_holonomic_set_length(ans, 2);
        check(re, ans, de);

        /* atan(x) */
        fmpz_holonomic_fun_set_atan(de);
        fmpz_holonomic_get_series(re, de);
        fmpz_poly_set_str(ans->coeffs + 0, "2  0 1");
        fmpz_poly_set_str(ans->coeffs + 1, "0");
        fmpz_poly_set_str(ans->coeffs + 2, "2  2 1");
        _fmpz_holonomic_set_length(ans, 3);
        check(re, ans, de);

        /* atan(s+x) */
        fmpz_holonomic_shift_fmpq(de, de, s);
        fmpz_holonomic_get_series(re, de);
        fmpz_poly_set_str(ans->coeffs + 0, "2  0 9");
        fmpz_poly_set_str(ans->coeffs + 1, "2  -42 -42");
        fmpz_poly_set_str(ans->coeffs + 2, "2  116 58");
        _fmpz_holonomic_set_length(ans, 3);
        check(re, ans, de);

        /* erf(x) */
        fmpz_holonomic_fun_set_erf(de);
        fmpz_holonomic_get_series(re, de);
        fmpz_poly_set_str(ans->coeffs + 0, "2  0 2");
        fmpz_poly_set_str(ans->coeffs + 1, "0");
        fmpz_poly_set_str(ans->coeffs + 2, "3  2 3 1");
        _fmpz_holonomic_set_length(ans, 3);
        check(re, ans, de);

        /* erf(s+x) */
        fmpz_holonomic_shift_fmpq(de, de, s);
        fmpz_holonomic_get_series(re, de);
        fmpz_poly_set_str(ans->coeffs + 0, "2  0 6");
        fmpz_poly_set_str(ans->coeffs + 1, "2  -14 -14");
        fmpz_poly_set_str(ans->coeffs + 2, "3  6 9 3");
        _fmpz_holonomic_set_length(ans, 3);
        check(re, ans, de);

        /* x^s */
        fmpz_holonomic_fun_set_pow_fmpq(de, s);
        fmpz_holonomic_get_series(re, de);
        fmpz_poly_set_si(ans->coeffs + 0, 1);
        _fmpz_holonomic_set_length(ans, 1);
        check(re, ans, de);

        /* (x+s)^s */
        fmpz_holonomic_shift_fmpq(de, de, s);
        fmpz_holonomic_normalise_content(de);
        fmpz_holonomic_get_series(re, de);
        fmpz_poly_set_str(ans->coeffs + 0, "2  -7 -3");
        fmpz_poly_set_str(ans->coeffs + 1, "2  7 7");
        _fmpz_holonomic_set_length(ans, 2);
        check(re, ans, de);

        /* x^n */
        fmpz_holonomic_fun_set_pow_fmpz(de, fmpq_numref(s));
        fmpz_holonomic_get_series(re, de);
        fmpz_poly_set_si(ans->coeffs + 0, 1);
        _fmpz_holonomic_set_length(ans, 1);
        check(re, ans, de);

        /* (x+s)^n */
        fmpz_holonomic_shift_fmpq(de, de, s);
        fmpz_holonomic_normalise_content(de);
        fmpz_holonomic_get_series(re, de);
        fmpz_poly_set_str(ans->coeffs + 0, "2  -21 -3");
        fmpz_poly_set_str(ans->coeffs + 1, "2  7 7");
        _fmpz_holonomic_set_length(ans, 2);
        check(re, ans, de);

        fmpz_holonomic_clear(re);
        fmpz_holonomic_clear(de);
        fmpz_holonomic_clear(ans);
        fmpq_clear(s);
    }

    flint_cleanup();
    printf("PASS\n");
    return EXIT_SUCCESS;
}
コード例 #4
0
int
main(void)
{
    int i, result;
    FLINT_TEST_INIT(state);

    flint_printf("inv_series_newton....");
    fflush(stdout);

    

    /* Check Q^{-1} * Q is congruent 1 mod t^n */
    for (i = 0; i < 100 * flint_test_multiplier(); i++)
    {
        fmpz_poly_t a, b, c, one;
        slong n = n_randint(state, 80) + 1;

        fmpz_poly_init(a);
        fmpz_poly_init(b);
        fmpz_poly_init(c);
        fmpz_poly_init(one);

        fmpz_poly_randtest_not_zero(a, state, n_randint(state, 80) + 1, 100);
        fmpz_poly_set_coeff_si(a, 0, n_randint(state, 2) ? 1 : -1);

        fmpz_poly_set_ui(one, 1);

        fmpz_poly_inv_series_newton(b, a, n);
        fmpz_poly_mullow(c, a, b, n);

        result = (fmpz_poly_equal(c, one));
        if (!result)
        {
            flint_printf("FAIL:\n");
            flint_printf("a = "), fmpz_poly_print(a), flint_printf("\n\n");
            flint_printf("b = "), fmpz_poly_print(b), flint_printf("\n\n");
            flint_printf("c = "), fmpz_poly_print(c), flint_printf("\n\n");
            abort();
        }

        fmpz_poly_clear(a);
        fmpz_poly_clear(b);
        fmpz_poly_clear(c);
        fmpz_poly_clear(one);
    }

    /* Verify bug fix for the case Q = -1 mod (x) */
    {
        fmpz_poly_t a, b, c, one;
        slong n = 1;

        fmpz_poly_init(a);
        fmpz_poly_init(b);
        fmpz_poly_init(c);
        fmpz_poly_init(one);

        fmpz_poly_set_si(a, -1);
        fmpz_poly_set_ui(one, 1);

        fmpz_poly_inv_series_newton(b, a, n);
        fmpz_poly_mullow(c, a, b, n);

        result = (fmpz_poly_equal(c, one));
        if (!result)
        {
            flint_printf("FAIL:\n");
            flint_printf("a = "), fmpz_poly_print(a), flint_printf("\n\n");
            flint_printf("b = "), fmpz_poly_print(b), flint_printf("\n\n");
            flint_printf("c = "), fmpz_poly_print(c), flint_printf("\n\n");
            abort();
        }

        fmpz_poly_clear(a);
        fmpz_poly_clear(b);
        fmpz_poly_clear(c);
        fmpz_poly_clear(one);
    }

    FLINT_TEST_CLEANUP(state);
    
    flint_printf("PASS\n");
    return 0;
}
コード例 #5
0
ファイル: t-set_si_equal.c プロジェクト: goens/flint2
int
main(void)
{
    int i, result;
    flint_rand_t state;

    printf("set_si_equal....");
    fflush(stdout);

    flint_randinit(state);

    /* equal polynomials */
    for (i = 0; i < 10000; i++)
    {
        fmpz_poly_t a, b;
        long n;

        fmpz_poly_init(a);
        fmpz_poly_init(b);
        n = z_randtest(state);

        fmpz_poly_set_si(a, n);
        fmpz_poly_set(b, a);

        result = (fmpz_poly_equal(a, b));
        if (!result)
        {
            printf("FAIL:\n");
            printf("n = %ld\n\n", n);
            printf("a = "), fmpz_poly_print(a), printf("\n\n");
            printf("b = "), fmpz_poly_print(b), printf("\n\n");
            abort();
        }

        fmpz_poly_clear(a);
        fmpz_poly_clear(b);
    }

    for (i = 0; i < 10000; i++)
    {
        fmpz_poly_t a, b;
        long m, n;

        fmpz_poly_init(a);
        fmpz_poly_init(b);

        m = z_randtest(state);
        n = z_randtest(state);
        while (m == n)
            n = z_randtest(state);
        fmpz_poly_set_si(a, m);
        fmpz_poly_set_si(b, n);

        result = (!fmpz_poly_equal(a, b));
        if (!result)
        {
            printf("FAIL:\n");
            printf("m = %ld\n\n", m);
            printf("n = %ld\n\n", n);
            printf("a = "), fmpz_poly_print(a), printf("\n\n");
            printf("b = "), fmpz_poly_print(b), printf("\n\n");
            abort();
        }

        fmpz_poly_clear(a);
        fmpz_poly_clear(b);
    }

    flint_randclear(state);
    _fmpz_cleanup();
    printf("PASS\n");
    return 0;
}
コード例 #6
0
ファイル: t-set_si_equal.c プロジェクト: clear731/lattice
int
main(void)
{
    int i, result;
    FLINT_TEST_INIT(state);

    flint_printf("set_si_equal....");
    fflush(stdout);

    

    /* equal polynomials */
    for (i = 0; i < 1000 * flint_test_multiplier(); i++)
    {
        fmpz_poly_t a, b;
        slong n;

        fmpz_poly_init(a);
        fmpz_poly_init(b);
        n = z_randtest(state);

        fmpz_poly_set_si(a, n);
        fmpz_poly_set(b, a);

        result = (fmpz_poly_equal(a, b));
        if (!result)
        {
            flint_printf("FAIL:\n");
            flint_printf("n = %wd\n\n", n);
            flint_printf("a = "), fmpz_poly_print(a), flint_printf("\n\n");
            flint_printf("b = "), fmpz_poly_print(b), flint_printf("\n\n");
            abort();
        }

        fmpz_poly_clear(a);
        fmpz_poly_clear(b);
    }

    for (i = 0; i < 1000 * flint_test_multiplier(); i++)
    {
        fmpz_poly_t a, b;
        slong m, n;

        fmpz_poly_init(a);
        fmpz_poly_init(b);

        m = z_randtest(state);
        n = z_randtest(state);
        while (m == n)
            n = z_randtest(state);
        fmpz_poly_set_si(a, m);
        fmpz_poly_set_si(b, n);

        result = (!fmpz_poly_equal(a, b));
        if (!result)
        {
            flint_printf("FAIL:\n");
            flint_printf("m = %wd\n\n", m);
            flint_printf("n = %wd\n\n", n);
            flint_printf("a = "), fmpz_poly_print(a), flint_printf("\n\n");
            flint_printf("b = "), fmpz_poly_print(b), flint_printf("\n\n");
            abort();
        }

        fmpz_poly_clear(a);
        fmpz_poly_clear(b);
    }

    FLINT_TEST_CLEANUP(state);
    
    flint_printf("PASS\n");
    return 0;
}