问题标签 [lcg]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 加速 CPython 中的模运算
这是一个 Park-Miller 伪随机数生成器:
这783
只是一个任意的种子。这48271
是 Park 和 Miller 在原始论文中推荐的系数(PDF:Park, Stephen K.;Miller, Keith W. (1988). “Random Number Generators: Good Ones are Hard To Find”)
我想提高这个LCG的性能。文献描述了一种使用按位技巧(来源)避免除法的方法:
素数模数需要计算双倍宽度乘积和显式缩减步骤。如果使用的模数刚好小于 2 的幂(梅森素数 2 31 -1 和 2 61 -1 很流行,2 32 -5 和 2 64 -59 也是如此),减少模 m = 2 e - d 可以比使用恒等式 2 e ≡ d (mod m)的一般双宽度除法更便宜。
注意到模数0x7fffffff
实际上是梅森素数 2**32 - 1,这是用 Python 实现的想法:
基本基准测试脚本:
在 pypy (7.3.0 @ 3.6.9) 中性能得到了改进,例如生成 100 M 项:
不幸的是,在 CPython (3.9.0 / Linux) 中性能实际上有所下降:
我的问题:
- 为什么通常被吹捧为优化的按位算术实际上比 CPython 中的模运算还要慢?
- 您能否以其他方式在 CPython 下提高此 PRNG 的性能,也许使用 numpy 或ctypes?
请注意,此处不一定需要任意精度整数,因为此生成器永远不会产生长于:
java - 线性同余发生器给出错误的输出
我创建了一个线性同余生成器 (LCG),但它似乎给了我错误的输出。
我得到的输出是:
我使用了 a、c 和 m 的这些值,因为我读到 java.util.Random 类也使用这些值。但是使用具有相同种子的此类会给出不同的答案。我还检查了其他 lcg 计算器,我的答案也不匹配。我不知道出了什么问题。
java - 如何在 Java 中实现线性同余生成器?
我正在实现我自己的 PRNG,我应该使用线性同余生成器。我的一种方法应该生成下一个伪随机数,如下所示。较早从用户那里检索到种子。
这是应该生成下一个伪随机数的方法。这是我试图写的,但我真的不知道如何使它适用于下一个即将到来的数字。a 和 b 是选定的常数,m 是选定的素数。
python - 使用python生成密钥流并对明文进行加密和解密的线性同余生成器
我正在使用线性同余生成器生成密钥流,然后我将使用这个密钥流来加密和解密明文。我正在尝试生成 47 个伪随机数,明文将是“Meetmeattownhallatsevenpmforpaymentandbringbear”密钥流的长度需要相同作为明文的长度。然后我们将生成的数字映射到查找字母表中的字母表。
我正在创建一个 python 脚本来执行线性同余生成器来生成密钥流。我正在尝试加密明文,“准备好下午 5 点在市政厅见面”。我很难做到这一点。我正在使用下面的线性同余生成器的算法
其中 Xn 是伪随机值的序列,并且
Python代码
我希望输出是这样的。
您能否在线性同余生成器 python 中帮助我生成密钥流以加密和解密明文以及如何将生成的数字映射到明文的字符。
谢谢
cryptography - 线性同余生成器变量的推荐值
我正在尝试使用线性同余生成器生成 48 个伪随机数。我只使用从 a 到 z 的字母作为我的明文,用于映射 0 到 25。
我正在使用下面的线性同余生成器的算法
其中 Xn 是伪随机值的序列,并且
我正在使用下面的线性同余生成器的算法
种子、增量、乘数和模数的推荐值是多少。密钥流需要从 0 到 26,因为我需要将数字映射到相应的字母。我想要独特的和更少的重复。
请多多指教。
谢谢
python - 无法理解线性同余生成器的代码
我正在制作另一个 python 脚本来执行线性同余生成器以生成 55 个伪随机数,但无法理解线性同余生成器的算法以及我的脚本如何工作,即使脚本对我来说很简单。
基于python脚本,为什么每个循环的输出都在变化?python 脚本对于线性同余生成器是否正确?
c++ - 通过 C++ 中的线性同余生成器生成随机数
我正在研究 C++ 中的随机数生成,我已经从以下站点实现了它:
运行此程序时,我收到以下错误:
请帮助我正确运行它。
numbers - 固定 M 存在多少个全长周期 LCG
给定 LCG 中的一些固定 M,公式为:x[n+1] = (A * x[n] + C) mod M,变量 A 和 C 存在多少个全长周期 LCG,0<A<M, 0<=C<M。可以不用蛮力就说吗?例如。手动测试每种组合的 Hull-Dobell 定理。谢谢你。
python - C++ 和 Python 之间整数计算结果不匹配(随机数生成器)
我的一个项目需要一个伪随机数生成方案(独立于标准库),我尝试了一个简单的基于LCG的 RNG。它似乎工作正常,只是它在 C++ 和 Python 中产生不同的值。我在下面给出了相关的代码。我无法找到错误。任何帮助将不胜感激!
(c++)
(Python)
(结果:c++)
(结果:蟒蛇)
assembly - 未知 dx 的反向乘法 - 在多个 mul/add 常量步骤后求解原始 AX
我在 16 位 x86 asm 中有这个重复的迭代过程
它运行了几次,但对于我们的例子,假设它运行了 3 次,现在完成后我得到dx:ax
并且需要恢复ax
该程序的初始值(初始dx
值为 0)。乍一看,我们可以看到关于 dx 的信息在这个过程中丢失了,因为用新mul
的覆盖了最后dx
一个。
如果可能的话,我正在寻找一种方法来扭转这个过程,当然假设上面的代码不能改变。
如果我忘记解释某事或没有提供有关问题的足够详细信息,请告诉我,我会回答。