2012-04-10 37 views
0

嗨即時嘗試獲得一個統一的隨機數發生器使用加密算法作爲引擎。 DES是可以使用的,但在這種情況下,我已經使用TEA根據這個http://myweb.tiscali.co.uk/jgrimbleby/random.htm將代碼從C++移植到python。問題是我需要的範圍是介於0和1之間。目前我得到的值非常大10^76範圍。任何想法,如果它的一個轉錄錯誤在我的部分或如果theres任何加法,我可以放在獲得所需的範圍。使用TEA的僞隨機數發生器

class psrTEA: 

def __init__(self): 

    self.m = 4294967296.0 
    self.d = 0X09E3779B9L 
    self.k0 = 0X0C7D7A8B4L 
    self.k1 = 0X09ABFB3B6L 
    self.k2 = 0X073DC1683L 
    self.k3 = 0X017B7BE73L 

    self.y = 123456789L 
    self.z = 987654321L 

def rnd(self): 
    s = 0 
    self.y = long(time.time()) 
    self.z = long(time.clock()) 

    for n in range(31): 
     s += self.d 
     self.y += (self.z << 4) + self.k0^self.z + s^(self.z >> 5) + self.k1 
     self.z += (self.y << 4) + self.k2^self.y + s^(self.y >> 5) + self.k3 

    return ((self.z + self.y/self.m)/ self.m) 

回答

1

計算您的最高值(或計算大量的值,取最大值,也許根據2的冪或某物猜測)。

然後將每個較大的結果除以最高值的浮點版本。這應該將事情擴展到0..1。

+0

謝謝,改變我的m值以上反映,因爲前面的val太小了點 – arm1 2012-04-18 20:39:34