2011-09-02 17 views

答えて

6

あなたはrandom.randomを探しています。

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

drand48と同じジェネレータは使用しません。 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 

しかし、出力はPythonの標準乱数ジェネレータよりも大幅に劣ります。 rand48ファミリの関数は、SVID 3によって1989年に廃止されました。

+0

出力がdrand48()と同じかどうかわかりません...だから私は質問しました... – Shan

+0

出力は異なりますそれは数を生成するために異なるアルゴリズムを使用するからです。しかし、両方の関数は一様(0,1)分布に近似しています。 –

+0

私はちょうどdrand48()を必要としています...その必要条件... – Shan

関連する問題