0

嗨,我正在尝试使用加密算法作为引擎来获得统一的随机数生成器。可以使用 DES,但在这种情况下,我根据http://myweb.tiscali.co.uk/jgrimbleby/random.htm将代码从 c++ 移植到 python 使用了 TEA。我遇到的问题是我需要范围在 0 和 1 之间。目前我得到的值是非常大的 10 ^ 76 范围。任何想法是否是我的转录错误,或者我是否可以添加任何添加来获得所需的范围。

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)
4

1 回答 1

1

计算你的最高值(或计算大量值,取最大值,也许根据 2 的幂或其他东西猜测一下)。

然后将每个大结果除以最高值的浮点版本。那应该将事情缩放到0..1。

于 2012-04-11T00:32:00.943 回答