version 1.1, 2000/09/09 14:13:15 |
version 1.1.1.2, 2003/08/25 16:06:35 |
|
|
using STATE as the random state previously initialized by a call to |
using STATE as the random state previously initialized by a call to |
gmp_randinit(). |
gmp_randinit(). |
|
|
Copyright (C) 1999, 2000 Free Software Foundation, Inc. |
Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc. |
|
|
This file is part of the GNU MP Library. |
This file is part of the GNU MP Library. |
|
|
Line 26 MA 02111-1307, USA. */ |
|
Line 26 MA 02111-1307, USA. */ |
|
#include "gmp-impl.h" |
#include "gmp-impl.h" |
|
|
void |
void |
#if __STDC__ |
|
mpf_urandomb (mpf_t rop, gmp_randstate_t rstate, unsigned long int nbits) |
mpf_urandomb (mpf_t rop, gmp_randstate_t rstate, unsigned long int nbits) |
#else |
|
mpf_urandomb (rop, rstate, nbits) |
|
mpf_t rop; |
|
gmp_randstate_t rstate; |
|
unsigned long int nbits; |
|
#endif |
|
{ |
{ |
mp_ptr rp; |
mp_ptr rp; |
mp_size_t nlimbs; |
mp_size_t nlimbs; |
mp_exp_t exp; |
mp_exp_t exp; |
|
|
|
nbits = MIN (nbits, __GMPF_PREC_TO_BITS (rop->_mp_prec)); |
|
|
rp = PTR (rop); |
rp = PTR (rop); |
nlimbs = (nbits + BITS_PER_MP_LIMB - 1) / BITS_PER_MP_LIMB; |
nlimbs = (nbits + GMP_NUMB_BITS - 1) / GMP_NUMB_BITS; |
|
|
_gmp_rand (rp, rstate, nbits); |
_gmp_rand (rp, rstate, nbits); |
|
|
/* If nbits isn't a multiple of BITS_PER_MP_LIMB, shift up. */ |
/* If nbits isn't a multiple of GMP_NUMB_BITS, shift up. */ |
if (nlimbs != 0) |
if (nlimbs != 0) |
{ |
{ |
if (nbits % BITS_PER_MP_LIMB != 0) |
if (nbits % GMP_NUMB_BITS != 0) |
mpn_lshift (rp, rp, nlimbs, |
mpn_lshift (rp, rp, nlimbs, GMP_NUMB_BITS - nbits % GMP_NUMB_BITS); |
BITS_PER_MP_LIMB - nbits % BITS_PER_MP_LIMB); |
|
} |
} |
|
|
exp = 0; |
exp = 0; |
Line 60 mpf_urandomb (rop, rstate, nbits) |
|
Line 54 mpf_urandomb (rop, rstate, nbits) |
|
} |
} |
EXP (rop) = exp; |
EXP (rop) = exp; |
SIZ (rop) = nlimbs; |
SIZ (rop) = nlimbs; |
|
|
} |
} |