2011-09-02 3 views

답변

6

당신은 random.random 찾고 있습니다.

>>> import random 
>>> help(random) 
>>> random.random() 
0.8423026866867628 

drand48과 같은 생성기는 사용하지 않습니다. 패밀리는 48 비트 선형 합동 생성기를 사용하는 반면 Python 임의 모듈은 우수한 Mersenne Twister 알고리즘을 사용합니다.

정확히 동일한 출력을 drand48으로 만들려면이를 Python으로 구현할 수 있습니다.

# Uncomment the next line if using Python 2.x... 
# from __future__ import division 
class Rand48(object): 
    def __init__(self, seed): 
     self.n = seed 
    def seed(self, seed): 
     self.n = seed 
    def srand(self, seed): 
     self.n = (seed << 16) + 0x330e 
    def next(self): 
     self.n = (25214903917 * self.n + 11) & (2**48 - 1) 
     return self.n 
    def drand(self): 
     return self.next()/2**48 
    def lrand(self): 
     return self.next() >> 17 
    def mrand(self): 
     n = self.next() >> 16 
     if n & (1 << 31): 
      n -= 1 << 32 
     return n 

그러나 출력은 파이썬 표준 난수 생성기보다 현저하게 떨어집니다. rand48 계열의 함수는 SVID 3에 의해 1989 년에 폐기되었습니다.

+0

출력이 drand48()와 같은지 확실하지 않습니다. 그래서 질문했습니다 ... – Shan

+0

출력이 달라집니다. 숫자를 생성하기 위해 다른 알고리즘을 사용하기 때문입니다. 그러나 두 함수 모두 균일 한 (0,1) 분포를 근사합니다. –

+0

정확히 drand48()이 필요합니다. 요구 사항 ... – Shan

관련 문제