Math-GMPq
view release on metacpan or search on metacpan
To print to an open filehandle (let's call it $fh):
TRmpq_out_str(\*$fh, $base, $digits, $op);
$bytes_read = Rmpq_inp_str($rop, $base);
BEST TO USE TRmpq_inp_str INSTEAD.
Read a string of digits from STDIN and convert them to a rational
in $rop. Any initial white-space characters are read and
discarded. Return the number of characters read (including white
space), or 0 if a rational could not be read.
The input can be a fraction like `17/63' or just an integer like
`123'. Reading stops at the first character not in this form, and
white space is not permitted within the string. If the input
might not be in canonical form, then `mpq_canonicalize' must be
called. $base can be between 2 and 36, or can be 0 in which case the
leading characters of the string determine the base, `0x' or `0X'
for hexadecimal, `0' for octal, or decimal otherwise. The leading
characters are examined separately for the numerator and
denominator of a fraction, so for instance `0x10/11' is 16/11,
whereas `0x10/0x11' is 16/17.
$bytes_read = TRmpq_inp_str($rop, $stream, $base);
As for Rmpq_inp_str, except that there's the capability to read
from somewhere other than STDIN.
To read from STDIN:
TRmpq_inp_str($rop, *stdin, $base);
To read from an open filehandle (let's call it $fh):
TRmpq_inp_str($rop, \*$fh, $base);
#######################
RANDOM NUMBER FUNCTIONS
$state = qgmp_randinit_default();
This is the Math::GMPq interface to the gmp library function
'gmp_randinit_default'.
$state is blessed into package Math::GMPq::Random and will be
automatically cleaned up when it goes out of scope.
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
the gmp_randinit_mt function (Mersenne Twister algorithm).
$state = qgmp_randinit_mt();
This is the Math::GMPq interface to the gmp library function
'gmp_randinit_mt'.
Currently identical to fgmp_randinit_default().
$state = qgmp_randinit_lc_2exp($mpz, $ui, $m2exp);
This is the Math::GMPq interface to the gmp library function
'gmp_randinit_lc_2exp'. $mpz is a Math::GMP or Math::GMPz object,
so one of those modules is required in order to make use of this
function.
$state is blessed into package Math::GMPq::Random and will be
automatically cleaned up when it goes out of scope.
Initialize $state with a linear congruential algorithm
X = ($mpz*X + $ui) 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 m2exp/2 bits is to be generated,
multiple iterations of the recurrence are used and the results
concatenated.
$state = qgmp_randinit_lc_2exp_size($ui);
This is the Math::GMPq interface to the gmp library function
'gmp_randinit_lc_2exp_size'.
$state is blessed into package Math::GMPf::Random and will be
automatically cleaned up when it goes out of scope.
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 $ui bits (or more) of each X will be used,
ie. m2exp/2 >= $ui.
If $ui is bigger than the table data provides then the function fails
and dies with an appropriate error message. The maximum value for $ui
currently supported is 128.
$state2 = qgmp_randinit_set($state1);
This is the Math::GMPq interface to the gmp library function
'gmp_randinit_set'.
$state2 is blessed into package Math::GMPf::Random and will be
automatically cleaned up when it goes out of scope.
Initialize $state2 with a copy of the algorithm and state from
$state1.
$state = qgmp_randinit_default_nobless();
$state = qgmp_randinit_mt_nobless();
$state = qgmp_randinit_lc_2exp_nobless($mpz, $ui, $m2exp);
$state2 = qgmp_randinit_set_nobless($state1);
As for the above comparable function, but $state is not blessed into
any package. (Generally not useful - but they're available if you
want them.)
qgmp_randseed($state, $mpz); # $mpz is a Math::GMPz or Math::GMP object
qgmp_randseed_ui($state, $ui);
These are the Math::GMPz interfaces to the gmp library functions
'gmp_randseed' and 'gmp_randseed_ui'.
Seed an initialised (but not yet seeded) $state with $mpz/$ui.
Either Math::GMP or Math::GMPz is required for 'gmp_randseed'.
$ui = qgmp_urandomb_ui($state, $bits);
This is the Math::GMPq interface to the gmp library function
'gmp_urandomb_ui'.
Return a uniformly distributed random number of $bits bits, ie. in
the range 0 to 2 ** ($bits - 1) inclusive. $bits must be less than or
equal to the number of bits in an unsigned long.
$ui2 = qgmp_urandomm_ui($state, $ui1);
This is the Math::GMPq interface to the gmp library function
'gmp_urandomm_ui'.
Return a uniformly distributed random number in the range 0 to
$ui1 - 1, inclusive.
qgmp_randclear($state);
Destroys $state, as also does Math::GMPq::Random::DESTROY - two
identical functions.
Use only if $state is an unblessed object - ie if it was initialised
using one of the qgmp_randinit*_nobless functions.
####################
OPERATOR OVERLOADING
( run in 0.482 second using v1.01-cache-2.11-cpan-71847e10f99 )