.. _long-extras:

**long_extras.h** -- support functions for signed word arithmetic
===============================================================================


Properties
--------------------------------------------------------------------------------


.. function:: size_t z_sizeinbase(slong n, int b)

    Returns the number of digits in the base `b` representation 
    of the absolute value of the integer `n`.

    Assumes that `b \geq 2`.


Checked Arithmetic
--------------------------------------------------------------------------------

.. function:: int z_mul_checked(slong * a, slong b, slong c)

    Set `*a` to `b` times `c` and return `1` if the product overflowed. Otherwise, return `0`.


Random functions 
--------------------------------------------------------------------------------


.. function:: mp_limb_signed_t z_randtest(flint_rand_t state)

    Returns a pseudo random number with a random number of bits, from 
    `0` to ``FLINT_BITS``.  The probability of the special values `0`, 
    `\pm 1`, ``COEFF_MAX``, ``COEFF_MIN``, ``WORD_MAX`` and 
    ``WORD_MIN`` is increased.

    This random function is mainly used for testing purposes.

.. function:: mp_limb_signed_t z_randtest_not_zero(flint_rand_t state)

    As for ``z_randtest(state)``, but does not return `0`.

.. function:: mp_limb_signed_t z_randint(flint_rand_t state, mp_limb_t limit)

    Returns a pseudo random number of absolute value less than 
    ``limit``.  If ``limit`` is zero or exceeds ``WORD_MAX``, 
    it is interpreted as ``WORD_MAX``.


Modular arithmetic
--------------------------------------------------------------------------------

.. function:: int z_kronecker(slong a, slong n)

    Return the Kronecker symbol `\left(\frac{a}{n}\right)` for any `a` and any `n`.
