1

在 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 中获得相同的随机数?

4

2 回答 2

1

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

https://github.com/davidbau/seedrandom

于 2015-07-08T23:34:41.097 回答
0

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

在蟒蛇中:

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),这取决于你找到足够好的东西。

于 2017-12-10T03:36:13.417 回答