whrandom.py
来自「mallet是自然语言处理、机器学习领域的一个开源项目。」· Python 代码 · 共 97 行
PY
97 行
# WICHMANN-HILL RANDOM NUMBER GENERATOR## Wichmann, B. A. & Hill, I. D. (1982)# Algorithm AS 183: # An efficient and portable pseudo-random number generator# Applied Statistics 31 (1982) 188-190## see also: # Correction to Algorithm AS 183# Applied Statistics 33 (1984) 123 ## McLeod, A. I. (1985)# A remark on Algorithm AS 183 # Applied Statistics 34 (1985),198-200### USE:# whrandom.random() yields double precision random numbers # uniformly distributed between 0 and 1.## whrandom.seed(x, y, z) must be called before whrandom.random()# to seed the generator## There is also an interface to create multiple independent# random generators, and to choose from other ranges.# Translated by Guido van Rossum from C source provided by# Adrian Baddeley.class whrandom: # # Initialize an instance. # Without arguments, initialize from current time. # With arguments (x, y, z), initialize from them. # def __init__(self, x = 0, y = 0, z = 0): self.seed(x, y, z) # # Set the seed from (x, y, z). # These must be integers in the range [0, 256). # def seed(self, x = 0, y = 0, z = 0): if not type(x) == type(y) == type(z) == type(0): raise TypeError, 'seeds must be integers' if not (0 <= x < 256 and 0 <= y < 256 and 0 <= z < 256): raise ValueError, 'seeds must be in range(0, 256)' if 0 == x == y == z: # Initialize from current time import time t = long(time.time() * 256) t = int((t&0xffffff) ^ (t>>24)) t, x = divmod(t, 256) t, y = divmod(t, 256) t, z = divmod(t, 256) # Zero is a poor seed, so substitute 1 self._seed = (x or 1, y or 1, z or 1) # # Get the next random number in the range [0.0, 1.0). # def random(self): x, y, z = self._seed # x = (171 * x) % 30269 y = (172 * y) % 30307 z = (170 * z) % 30323 # self._seed = x, y, z # return (x/30269.0 + y/30307.0 + z/30323.0) % 1.0 # # Get a random number in the range [a, b). # def uniform(self, a, b): return a + (b-a) * self.random() # # Get a random integer in the range [a, b] including both end points. # def randint(self, a, b): return a + int(self.random() * (b+1-a)) # # Choose a random element from a non-empty sequence. # def choice(self, seq): return seq[int(self.random() * len(seq))]# Initialize from the current time#_inst = whrandom()seed = _inst.seedrandom = _inst.randomuniform = _inst.uniformrandint = _inst.randintchoice = _inst.choice
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?