【问题标题】:How to obtain the seed used by Haskell's RNG?Haskell的RNG使用的种子如何获取?
【发布时间】:2015-01-20 00:09:36
【问题描述】:

我正在使用以下 Haskell 代码编写一百万个伪随机位的文件:

import System.Random
rbits= do
  g <- getStdGen
  writeFile "haskellbits.txt" (take 1000000 (randomRs ('0', '1') g))

但是,我也有兴趣编写用于获取序列的种子。怎么输出?

【问题讨论】:

  • 好吧,StdGen 有一个 Show 实例。您可以简单地使用print g。 (请正确缩进您的代码并确保您已复制所有内容)
  • 另外,考虑使用不同的生成器。 Haskell 不再指定官方的,StdGen 有很多不足。
  • 我正在尝试比较不同的生成器,看看哪种生成器在哪种情况下最好。 @Thomas stdGen 有哪些不足之处?
  • @user2962685 StdGen 不是加密安全的,StdGen isn't even statistically good random,与某些生成器相比,它确实很慢,默认情况下它只是从时间开始播种,你不能重新播种生成器,可用的抽象(RandomGen)不允许失败,RandomGen 甚至不允许创建新的生成器,并且没有跟踪周期。

标签: haskell random binary seed prng


【解决方案1】:
import System.Random
outputSeed = do
  g <- getStdGen
  print g

这会将种子打印为两个数字(我刚刚尝试过,它输出1010512508 1

您还可以使用read 将字符串转回随机种子。如果原始字符串采用该格式,它将返回相同的种子。但是,如果您使用其他字符串,它会执行其他操作来生成种子。

Prelude System.Random> read "111 112" :: StdGen
111 112
Prelude System.Random> read "blabla" :: StdGen
37214 1

【讨论】:

    猜你喜欢
    • 2013-12-09
    • 1970-01-01
    • 2014-02-11
    • 2011-01-04
    • 2014-08-21
    • 2013-02-10
    • 2020-04-25
    • 2012-09-28
    • 1970-01-01
    相关资源
    最近更新 更多