Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ alert(generator.next().value); // 282475249
alert(generator.next().value); // 1622650073
```

请注意,上面的代码也可以用普通函数来实现,就像这样:
请注意,也可以使用常规函数来完成相同的操作,就像这样:

```js run
function pseudoRandom(seed) {
Expand All @@ -35,4 +35,4 @@ alert(generator()); // 282475249
alert(generator()); // 1622650073
```

这也能正常工作。但是这样我们就不能用 `for..of` 来迭代,也不能用 generator 组合了,这样的形式可能在其他地方很有用
这也可以工作。但是这样我们就失去了使用 `for..of` 来进行迭代以及使用 generator 组合(composition)的能力,这些可能在其他地方很有用
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@

# 伪随机(Pseudo-random)generator
# 伪随机 generator

在许多场合下我们都需要随机数据
在很多地方我们都需要随机数据

其中之一就是用于测试。我们可能需要随机数据:文本,数字等以便很好的测试
其中之一就是测试。我们可能需要随机数据:文本,数字等,以便很好地进行测试

在 JavaScript 中,我们可以使用 `Math.random()`。但是如果出现问题,我们希望能使用完全相同的数据再重复进行测试
在 JavaScript 中,我们可以使用 `Math.random()`。但是如果什么地方出现了问题,我们希望能使用完全相同的数据进行重复测试

为此,我们使用所谓的“种子伪随机(seeded pseudo-random)generators”。它们采用“种子”,即第一个值,然后使用公式生成下一个值。因此相同的种子 yield 相同的序列,整个数据流很容易复现。我们只需要记住种子并重复它即可。
为此,我们可以使用所谓的“种子伪随机(seeded pseudo-random)generator”。它们将“种子(seed)”作为第一个值,然后使用公式生成下一个值。以便相同的种子(seed)可以产生(yield相同的序列,因此整个数据流很容易复现。我们只需要记住种子并重复它即可。

一个公式示例如下,它生成一些统一分布的值
这样的公式的一个示例如下,它可以生成一些均匀分布的值

```
next = previous * 16807 % 2147483647
```

如果我们使用 `1` 作为种子,它的值将会是
如果我们使用 `1` 作为种子,生成的值将会是
1. `16807`
2. `282475249`
3. `1622650073`
4. ……等等……
4. …………

那么,这里的任务是创建一个 generator 函数 `pseudoRandom(seed)`,它将 `seed` 作为参数然后以这个公式创建 generator。
这里的任务是创建一个 generator 函数 `pseudoRandom(seed)`,它将 `seed` 作为参数并使用此公式创建 generator。

使用范例:

Expand Down
Loading