Use system random instead of homebrew random
parent
42e2a5e9c2
commit
736da656bc
|
@ -5,33 +5,32 @@ Warning! Don't use this for anything important, it's probably biased
|
||||||
|
|
||||||
___license___ = "MIT"
|
___license___ = "MIT"
|
||||||
|
|
||||||
# todo: simplify this by using "urandom"
|
try:
|
||||||
import os
|
import urandom as sysrand
|
||||||
|
except ImportError:
|
||||||
|
import random as sysrand
|
||||||
|
|
||||||
_bigrand_bytes = 10
|
# arbitrary: max is 32-bit
|
||||||
_bigrand_max = pow(256, _bigrand_bytes)
|
_bigrand_max = pow(2, 32)
|
||||||
|
|
||||||
def _bigrand():
|
def _bigrand():
|
||||||
"""generates a random number between 0 (incl) and _bigrand_max (excl)"""
|
"""generates a random number between 0 (incl) and _bigrand_max (excl)"""
|
||||||
base = 0
|
return int(sysrand.getrandbits(32))
|
||||||
for b in os.urandom(_bigrand_bytes):
|
|
||||||
base = (base << 8) + b
|
|
||||||
return base
|
|
||||||
|
|
||||||
def random():
|
def random():
|
||||||
"""Return the next random floating point number in the range [0.0, 1.0)."""
|
"""Return the next random floating point number in the range [0.0, 1.0)."""
|
||||||
return _bigrand() / _bigrand_max
|
return sysrand.random()
|
||||||
|
|
||||||
def randrange(start, stop=None):
|
def randrange(start, stop=None):
|
||||||
"""Return a randomly selected element from range(start, stop)"""
|
"""Return a randomly selected element from range(start, stop)"""
|
||||||
if stop is None:
|
if stop is None:
|
||||||
stop = start
|
stop = start
|
||||||
start = 0
|
start = 0
|
||||||
return start + (_bigrand() * (stop - start) // _bigrand_max)
|
return sysrand.randrange(start, stop)
|
||||||
|
|
||||||
def randint(start, stop):
|
def randint(start, stop):
|
||||||
"""Return a random integer N such that a <= N <= b."""
|
"""Return a random integer N such that a <= N <= b."""
|
||||||
return randrange(start, stop + 1)
|
return sysrand.randint(start, stop)
|
||||||
|
|
||||||
def shuffle(seq):
|
def shuffle(seq):
|
||||||
"""Shuffle the sequence x in place."""
|
"""Shuffle the sequence x in place."""
|
||||||
|
|
Loading…
Reference in New Issue