gpt4 book ai didi

haskell - 我可以期望使用 System.Random 的结果在所有系统上都可重现吗?

转载 作者:行者123 更新时间:2023-12-02 02:48:01 24 4
gpt4 key购买 nike

给定相同的种子,Haskell 的 System.Random 会为所有系统、处理器架构和 Haskell 版本提供相同的结果吗?是否有这样的 promise 在 future 会成立?

更具体地说,我可以期望这总是(过去和将来)返回相同的列表吗?

import System.Random
rs = randomRs (1, 2^31-1) (mkStdGen 1)

最佳答案

伪随机数生成器对于它们“播种”的值是确定性的。这就是为什么mkStdGen是纯函数。如果您真的很担心,是的,最好不要依赖不属于库规范一部分的不变量。实际上,我希望表明,在这种情况下,伪随机性与它无关——问题归结为没有机器特定类型的纯 Haskell 在不同平台上是否评估相同。

StdGen目前是用 Int32s 实现的。当然,可以从这些固定大小的整数中采样其他类型的数据,但随机数生成器本身仅使用与机器无关的数据类型。根据Integer类源,舍入也不由机器决定(这对于 C 整数类型也是如此)。与 flonums 不同,使用 fixnums 既不会因为打破标准而产生令人信服的性能优势,也会带来更大的程序正确性风险。

特别是从 StdGen 退一步,强密码学需要一个强大的伪随机性标准——无意的特定于架构的行为可能是一个主要的安全整体,而有意的特定于架构的行为基本上相当于编写、维护和证明正确多个发电机。如果额外的努力是值得的,那么广告/记录它也可能值得。

最后,Hackage 上有许多伪随机数生成器(System.Random 不应该是最快或最安全的 AFIAK),如果一个针对密码学的用途没有提供您想要的不变量,我会感到惊讶。

关于haskell - 我可以期望使用 System.Random 的结果在所有系统上都可重现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20212200/

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