gpt4 book ai didi

scala - 哪个 PRNG 适合功能使用?

转载 作者:行者123 更新时间:2023-12-04 16:10:25 24 4
gpt4 key购买 nike

这个问题的动机是在 Scala 中使用 PRNG,但答案很可能与语言无关。

问题

我想为我的 PRNG 提供一个功能接口(interface)。目前我所知道的 PRNG 实现(Java stdlib、Scala stdlib、commons math)是面向对象的,因为 PRNG 是一个具有可变状态的对象。但我更喜欢纯函数式的PRNG,主要有以下方法:

def nextInt(state: S): (Int,S)

在这里, S是 PRNG 的内部状态(称为种子或其他),该方法返回所需的随机值加上修改后的状态。

我需要的

最好是一个实现。但我可以自己轻松地做到这一点。使用 Java 的内置 PRNG 的一个非常简单的实现是:
def nextInt(state: Int): (Int,Int) = {
val rng = new Random(state)
(rng.nextInt(),rng.next())
}

或者更危险,更少浪费
def nextInt(state: Random): (Int, Random) = {
val newRng = state.clone
(newRng.nextInt(),newRng)
}

我真正需要的是一个质量好、状态小、计算快的PRNG算法。 Mersenne Twister 的状态为 600+ 字节。请注意,必须在每个步骤中复制状态。那么,有没有更小的东西?

是否有某种 PRNG 算法的比较?

最佳答案

您不需要功能实现来获得功能接口(interface)。

您可以将函数 PRNG 表示为 Java PRNG 或任何其他有状态 PRNG 生成的数字流。当您浏览流时,它会自动调用 Java PRNG 并记住结果。

关于scala - 哪个 PRNG 适合功能使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20174148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com