如何在JavaScript和Python中生成相同的随机数?

时间:2015-07-08 23:17:55

标签: javascript python random mersenne-twister

在Python中,如果我使用此代码:

import random
random.seed(123)
print(random.random())

第一个随机数始终为0.052363598850944326,因为每次运行程序时我都会给它相同的种子。

JavaScript没有使用种子的内置方法。我已经尝试了一个名为mersenne-twister.js的JavaScript脚本,因为这是Python使用的PRNG类型。但即使我使用相同的种子,我得到的结果也不同于Python。

var m = new MersenneTwister(123);
m.genrand_int32();

该代码将在第一次运行时始终返回0.6964691872708499

如何使用给定的种子在Python和JavaScript中获取相同的随机数?

2 个答案:

答案 0 :(得分:0)

当我将Python输出与JavaScript输出进行比较时,这个库/插件对我有用。

https://github.com/davidbau/seedrandom

答案 1 :(得分:0)

如果您不需要加密安全的伪随机数生成器,您可以使用类似的东西,使用正弦函数的小数。

在python中:

import math
def simple_random(precision=10000):
    i = 1
    while 1:
        x = math.sin(i) * precision
        yield x - math.floor(x)
        i += 1

在Javascript中:

var i = 1;
function simple_random(precision=10000) {
    x = Math.sin(i++) * precision;
    return x - Math.floor(x);
}

如果你想改变种子,你可以使用像sin(a * i + b)而不是sin(i)或a * sin(i + b)这样的东西,你可以找到足够好的东西。< / p>