- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我一直在阅读有关 XorShift PRNG 的信息,尤其是论文 here
一个人 here指出
The number lies in the range [1, 2**64). Note that it will NEVER be 0.
查看有意义的代码:
uint64_t x;
uint64_t next(void) {
x ^= x >> 12; // a
x ^= x << 25; // b
x ^= x >> 27; // c
return x * UINT64_C(2685821657736338717);
}
如果 x
为零,则下一个数字也将为零。但这不会降低它的用处吗?通常的使用模式类似于 min + rand() % (max - min)
或者如果您只需要 int
则将 64 位转换为 32 位。但是,如果永远不会返回 0
,那可能是一个严重的问题。此外,这些位不是 0
或 1
的概率与显然 0
丢失的概率相同,因此为零或可能性稍低。我什至在维基百科上找不到任何提及,所以我错过了什么吗?
那么在给定范围内从 XorShift64* 生成随机、均匀分布的数字的好方法是什么?
最佳答案
简短回答:不,它不能返回零。
根据Numeric Recipes “它产生一个完整的 2^64-1
[...] 缺失值为零”。
本质上,这些移位值已被仔细选择以生成非常长的序列(完全可能是一个没有零),因此可以确保生成每个数字。零确实是这个生成器的固定点,因此它产生 2 个序列:零和另一个包含所有其他数字。
因此 IMO 对于足够小的范围 max-min
足以使函数 (next() - 1) % (max - min) + min
或即使完全省略减法,因为模将返回零。如果想要更好的质量均匀分布,应该使用“常规”方法,使用 next()
作为范围为 [1, 2^64)
的基础生成器/p>
关于c++ - XorShift 可以返回零吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44753463/
用 C 和 Python 编写的相同 XorShift 函数会给出不同的结果。你能解释一下吗? XorShift 函数按以下方式生成数字: x(0) = 123456789 y(0) = 362436
我一直在阅读有关 XorShift PRNG 的信息,尤其是论文 here 一个人 here指出 The number lies in the range [1, 2**64). Note that
我需要在最大值范围内生成随机整数。由于性能至关重要,我决定使用 XORShift 生成器而不是 Java 的 Random 类。 long seed = System.nanoTime(); seed
我需要一个快速的随机数生成器,它允许我随机访问随机数序列中不同位置的数字。我选择了 Xorshift,因为它快速且易于实现。 为了从序列中得到一个特定的随机数,我实现了下面的方法(mPos保存了下一个
我有以下代码(the xorshift128+ code from Wikipedia 修改为使用 vector 类型): #include #include __v8si rand_si() {
我正在尝试实现 xorshift random number algorithm from Wikipedia在 java 。它有一个 C 语言示例,其中包含无符号长整型。鉴于 Java 没有无符号数
根据我的理解(和 javadoc),Random.nextInt 应该返回一个正值(或零)。 但是当我将它与 2 的幂的参数一起使用时,我经常收到负值。这是我的随机类: import java.uti
我有 C 代码,我想将其转换为 Delphi。我所做的到底是对还是错? uint64_t s[ 16 ]; int p; uint64_t next(void) { uint64_t s0 = s
我想用 Java、Python 和 JavaScript 实现 XorShift PRNG。给定相同的种子,不同的实现必须生成完全相同的序列。到目前为止,我还无法做到这一点。 我在 Java 中的实现
摘要 您好,假设您有 128 位自动机(由四个 32 位字表示 X 、 Y 、 Z 、 W )根据以下规则更改其状态: X = ... Y = ... Z = ... W = ... void nex
我实现了 Xorshift 生成器和其他生成器来比较它们在我的系统(Windows 和 Linux)上的性能。 https://en.wikipedia.org/wiki/Xorshift http:
我是一名优秀的程序员,十分优秀!