sunsevennv/xorshift

由 Andreas Madsen & Emil Bay 开发的随机数生成器 (RNG)

安装: 2

依赖关系: 0

建议者: 0

安全性: 0

星标: 2

关注者: 1

分支: 11

语言:JavaScript

1.0.4 2021-02-09 08:14 UTC

This package is auto-updated.

Last update: 2024-09-09 16:12:44 UTC


README

使用 xorshift128+ 的伪随机数生成器

使用 JavaScript(用于与赌博相关的游戏)认证的 RNG

此模块由 Andreas Madsen & Emil Bay 编写,并由 Brendan Nash 修改,以便在英国、马耳他和库拉索岛赌博许可证下进行认证。

该模块可以免费使用,符合原始作者的意图。

赌博许可证和 RNG 认证

如果您的组织需要 RNG 证书以获得赌博许可证,我们可以为此模块提供证书。

您可以通过以下链接下订单: https://gtec.curacaowebhosting.com/cart.php?gid=9

  • 电子邮件: brendan [at] gamblingTec.com
  • WhatsApp: +44 (0)7498 105896
  • Skype/Telegram: brendanjnash

安装

npm install xorshift

示例

var xorshift = require('xorshift');

for (var i = 0; i < 10; i++) {
  console.log(xorshift.random()); // number in range [0, 1)
}

文档

此模块导出一个默认的伪随机生成器。此生成器的种子已设置(使用 Date.now())。如果不合适,可以使用构造函数 xorshift.constructor 初始化自定义生成器。在两种情况下,都可以使用两个方法 .random.randomint 生成随机数。

var xorshift = require('xorshift');

xorshift.random()

此方法返回一个范围在 [0, 1) 内的随机 64 位双精度浮点数。这意味着 0 包含在内,而 1 不包含在内。这与 Math.random() 相当。

console.log(xorshift.random()); // number between 0 and 1

此方法可用于大多数目的,例如,在 2、3 和 4 之间随机选择,可以使用此函数

function uniformint(a, b) {
  return Math.floor(a + xorshift().random() * (b - a));
}

console.log(uniformint(2, 4));

xorshift.randomint()

此方法返回一个随机 64 位整数。由于 JavaScript 不支持 64 位整数,该数字表示为一个具有两个元素的大端顺序数组。

此方法在需要高精度时很有用,因为 xorshift.random() 方法不允许您获得此精度,因为 64 位 IEEE754 双精度浮点数只包含最显著的 52 位。

var bview = require('binary-view');
console.log(bview( new Uint32Array(xorshift.randomint()) ));

xorshift.constructor

此方法用于使用特定的种子构建一个新的随机生成器。这在测试涉及随机数的软件时很有用,并且需要一致的结果。

var XorShift = require('xorshift').constructor;
var rng1 = new XorShift([1, 0, 2, 0]);
var rng2 = new XorShift([1, 0, 2, 0]);

assert(rng1.random() === rng2.random());

XorShift 实例具有两种方法 randomrandomint。事实上,xorshift 模块是 XorShift 构造函数的一个实例。

参考

此模块实现了 xorshift128+ 伪随机数生成器。

这是通过 BigCrush 而没有系统性错误的最高速生成器,但由于相对较短的周期,它仅适用于具有非常轻微并行性的应用程序;否则,请使用 xorshift1024* 生成器。 – http://xorshift.di.unimi.it

此源还有一个 xorshift128+ 生成器的参考实现。已创建一个包装器,并用于测试此模块。要编译和运行它

gcc -O2 reference.c -o reference
./reference <numbers> <seed0> <seed1>
  • <numbers> 可以是任何大于零的数字,并且它将是写入 stdout 的随机数的数量。默认值是 10
  • <seed0><seed1> 构成算法使用的 128 位种子。默认是 [1, 2]

许可证

此软件根据 "MIT" 许可证授权

版权所有 (c) 2014 Andreas Madsen & Emil Bay

本软件及其相关文档文件(以下简称“软件”)的使用权在此免费授予任何获得软件副本的个人,不受限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、许可和/或出售软件副本的权利,并允许向其提供软件的个人这样做,但须遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。

软件按“原样”提供,不提供任何形式的保证,无论是明示的、默示的、包括但不限于适销性、特定用途适用性和非侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是否由于合同、侵权或其他行为,无论源于、源于或与软件的使用或其他方式有关。