Scratch用的是哪个RNG?

Which RNG is used in Scratch?

Scratch 1.4使用了哪个随机数生成器,我在哪里可以找到它的源代码实现?如果它只是 libc 的 random(),请指出它被调用的地方。

Scratch 1.x 是用 Squeak Smalltalk 编写的。您可以通过关注 these instructions.

从 Scratch 中获取源代码

pick random () to () 块在 Scratch-Objects -> ScriptableScratchMorph (instance) -> other ops -> randomFrom:to: 中定义。基本的必备代码有

t5 _ RandomGen next * (t4 - t3) + t3.

现在,RandomGen 是什么?事实证明,它在 Scratch 中(在 class 初始化中)被定义为只是 Squeak 的 Random.

的副本

根据the Squeak wiki

The random-number-generator is a Park-Miller generator, it is implemented in the class Random.

Scratch 还要求在某些 list blocks 中使用随机数,您可以在其中对 "any" 列表项进行操作。这是在 list ops -> lineNum:forList:.

中实现的