[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |

## 9.1 Random State Initialization

- Function:
*void***gmp_randinit_default***(gmp_randstate_t*`state`) Initialize

`state`with a default algorithm. This will be a compromise between speed and randomness, and is recommended for applications with no special requirements. Currently this is`gmp_randinit_mt`

.

- Function:
*void***gmp_randinit_mt***(gmp_randstate_t*`state`) -
Initialize

`state`for a Mersenne Twister algorithm. This algorithm is fast and has good randomness properties.

- Function:
*void***gmp_randinit_lc_2exp***(gmp_randstate_t*`state`, const mpz_t`a`, unsigned long`c`, mp_bitcnt_t`m2exp`) -
Initialize

`state`with a linear congruential algorithm*X = (*.`a`*X +`c`) mod 2^`m2exp`The low bits of

*X*in this algorithm are not very random. The least significant bit will have a period no more than 2, and the second bit no more than 4, etc. For this reason only the high half of each*X*is actually used.When a random number of more than

bits is to be generated, multiple iterations of the recurrence are used and the results concatenated.`m2exp`/2

- Function:
*int***gmp_randinit_lc_2exp_size***(gmp_randstate_t*`state`, mp_bitcnt_t`size`) -
Initialize

`state`for a linear congruential algorithm as per`gmp_randinit_lc_2exp`

.`a`,`c`and`m2exp`are selected from a table, chosen so that`size`bits (or more) of each*X*will be used, i.e..`m2exp`/2 >=`size`If successful the return value is non-zero. If

`size`is bigger than the table data provides then the return value is zero. The maximum`size`currently supported is 128.

- Function:
*void***gmp_randinit_set***(gmp_randstate_t*`rop`, gmp_randstate_t`op`) Initialize

`rop`with a copy of the algorithm and state from`op`.

- Function:
*void***gmp_randinit***(gmp_randstate_t*`state`, gmp_randalg_t`alg`, …) **This function is obsolete.**Initialize

`state`with an algorithm selected by`alg`. The only choice is`GMP_RAND_ALG_LC`

, which is`gmp_randinit_lc_2exp_size`

described above. A third parameter of type`unsigned long`

is required, this is the`size`for that function.`GMP_RAND_ALG_DEFAULT`

or 0 are the same as`GMP_RAND_ALG_LC`

.`gmp_randinit`

sets bits in the global variable`gmp_errno`

to indicate an error.`GMP_ERROR_UNSUPPORTED_ARGUMENT`

if`alg`is unsupported, or`GMP_ERROR_INVALID_ARGUMENT`

if the`size`parameter is too big. It may be noted this error reporting is not thread safe (a good reason to use`gmp_randinit_lc_2exp_size`

instead).

[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |

This document was generated on *March 31, 2014* using *texi2html 5.0*.