Return a random int in the range [0,n). Defined for n > 0. The implementation does not use getrandbits, but only random.
(self, n, maxsize=1<<BPF)
| 252 | return r |
| 253 | |
| 254 | def _randbelow_without_getrandbits(self, n, maxsize=1<<BPF): |
| 255 | """Return a random int in the range [0,n). Defined for n > 0. |
| 256 | |
| 257 | The implementation does not use getrandbits, but only random. |
| 258 | """ |
| 259 | |
| 260 | random = self.random |
| 261 | if n >= maxsize: |
| 262 | from warnings import warn |
| 263 | warn("Underlying random() generator does not supply \n" |
| 264 | "enough bits to choose from a population range this large.\n" |
| 265 | "To remove the range limitation, add a getrandbits() method.") |
| 266 | return _floor(random() * n) |
| 267 | rem = maxsize % n |
| 268 | limit = (maxsize - rem) / maxsize # int(limit * maxsize) % n == 0 |
| 269 | r = random() |
| 270 | while r >= limit: |
| 271 | r = random() |
| 272 | return _floor(r * maxsize) % n |
| 273 | |
| 274 | _randbelow = _randbelow_with_getrandbits |
| 275 |