# long_extras.h – support functions for signed word arithmetic

## Properties

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

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

slong 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.

slong z_randtest_not_zero(flint_rand_t state)

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

slong z_randint(flint_rand_t state, ulong 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

int z_kronecker(slong a, slong n)

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