2012-04-10 21 views
0

Hallo im Versuch, einen einheitlichen Zufallszahlengenerator zu erhalten, der einen Kryptoalgorithmus als die Maschine verwendet. DES ist möglich, verwendet zu werden, aber in diesem Fall habe ich TEA gemäß diesem http://myweb.tiscali.co.uk/jgrimbleby/random.htm verwendet, der den Code von C++ zu python portiert. Das Problem ist, dass ich brauche, dass der Bereich zwischen 0 und 1 liegt. Gegenwärtig sind die Werte sehr groß 10^76 range.Any Idee, wenn es ein Übertragungsfehler meinerseits ist oder wenn es irgendeine Hinzufügung gibt, kann ich mich setzen, um den gewünschten Bereich zu erhalten.Pseudozufallszahlengenerator unter Verwendung von 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) 

Antwort

1

Ihren höchsten Wert Berechnen (oder viele Werte berechnen, nehmen Sie die max, denke, vielleicht ein wenig auf der Basis einer Potenz von 2 oder etwas).

Dann teilen Sie jedes Ihrer großen Ergebnisse durch eine Float-Version des höchsten Werts. Das sollte Dinge auf 0..1 skalieren.

+0

danke, änderte meinen m-Wert oben, um zu reflektieren, dass das vorherige val ein bisschen zu klein war – arm1

Verwandte Themen