JavaScript 中的 Math.random 和 Web 编程

2024-02-20

根据这个堆栈溢出线程 https://stackoverflow.com/questions/10361466/what-algorithm-does-math-random-useJavaScript 中的 Math.random() 取决于浏览器或操作系统。基本上,这意味着 JavaScript 没有用于生成统一随机变量的标准算法。这个线程 https://stackoverflow.com/questions/9550796/why-is-google-chromes-math-random-number-generator-not-that-random似乎表明Chrome的统一随机数算法特别糟糕。

在我的程序中,我尝试根据一些信息和随机噪声来了解用户的行为。我对 Math.random() 生成的数字使用 Box-Muller 变换来生成高斯随机数。这是否意味着使用一种浏览器的用户会遇到与其他浏览器不同类型的噪音?请注意,我使用 Box Muller 是因为我不关心速度,但我知道它对伪随机数的生成方式特别敏感。似乎有很多关于为什么 Math.random() 不好的线程,但在实际使用什么的线程中却没有那么多。最佳实践是什么?因为我使用 Box-Muller 转换为高斯数,所以有什么我应该特别注意的吗?


有一个基于异或移位的 RNGhttp://en.wikipedia.org/wiki/Xorshift http://en.wikipedia.org/wiki/Xorshift具有良好的随机性属性,应该很容易移植到 JavaScript:

EDIT done:

(function () {
    var x = 123456789;
    var y = 362436069;
    var z = 521288629;
    var w = 88675123;
    var f = Math.pow(2, -32);

    Object.defineProperty(Math, 'xor128', {
        value: function () {
            var t = x ^ (x << 11);
            x = y;
            y = z;
            z = w;
            w = w ^ (w >>> 19) ^ (t ^ (t >>> 8));

            return (w >>> 0) * f;  // convert to floating point          
        }
    });

})();

注意:这仅使用生成的 128 位中的 32 位来产生浮点结果。理论上,您可以组合其他状态变量之一的另外 20 位来生成 52 位结果。

我看到的最重要的问题是它不支持播种 - 它总是生成相同的序列。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 中的 Math.random 和 Web 编程 的相关文章

随机推荐

  • 如何减小 iPython 笔记本的文件大小?

    我有一个 IPython 笔记本 虽然里面的代码只有 100 行左右 但它有几兆字节大 我认为它那么大 因为我在里面加载了几张图像 我想将此笔记本添加到 git 存储库 但是 我不想上传那么大的东西 这样很容易再次生成 是否可以仅保存 IP
  • C# 如何反序列化嵌入文本中的 xml 标签?

    我正在尝试使用 XmlSerializer 反序列化 NET 的 XML 文档注释的输出 作为参考 xml 文档的输出如下所示
  • 在循环内部还是外部声明变量更好?

    最好这样做 variable1Type foo variable2Type baa foreach var val in list foo new Foo foo x FormatValue val baa new Baa baa main
  • Vim Fugitive:Gblame 重责选项

    我最近一直在使用Fugitive的Gblame 但不太明白 reblame 的作用 有人可以更清楚地描述这些选项的作用吗 reblame at commit reblame at count th first grandparent P r
  • 为什么赋值表达式 [String x = (x = y)] 的变量初始化可以编译?

    这个如何编译才不会报错呢 据我了解 编译器检查变量的类型 在本例中String 然后查看右侧表达式的类型是否对应于变量的类型 或至少是一个子类型 但让我们坚持使用简单的情况String类 因为它是最后的 public class InitC
  • 在实体框架中自定义类型映射

    我正在使用 EF5 Code First 并尝试存储 IPAddress 对象 如果您尝试直接执行此操作 EF 会将其存储为两列 FIELDNAME Address 和 FIELDNAME Scope 不幸的是 这不足以存储 IPv4 地址
  • 寻找基于 Django 类的视图并在单个页面上具有多个表单示例

    我一直在寻找如何使用较新的基于 Django 类的视图方法在一页上显示 2 个独特的表单 有人可以参考一下吗 或者提供一个基本的例子 谷歌并没有因此成为我的 朋友 关键是你甚至不必使用其中之一FormView处理表单的子类 您只需添加手动处
  • BluetoothLEDevice.FromIdAsync 返回 null

    这是用于获取 BLE 设备的 UWP 代码 为什么我在某些设备上得到 bleDevice null 我没有找到任何解释这一点的文档 var devices await DeviceInformation FindAllAsync Bluet
  • Xcode - Segue 问题

    我一直在努力让segue继续工作 我写了以下内容 但由于某种原因 preparesegue 方法不会触发 我已经阅读了其他相关的帖子 但我无法让它启动 而且同样重要的是 我需要的变量没有被传输 m file implementation C
  • jQuery - 检查是否第一次点击

    我有 2 个函数 A 和 B 只需单击一次 div 即可调用 我只需要在第一次单击时调用函数 A 并在单击时调用函数 B 我怎么能这样做呢 更简单的解决方案 element one click function Call A click f
  • 调整 Datagridview 上的 Rowheader 属性

    在 Winforms DataGridView 中 我该如何 删除行标题上的箭头 我需要显示行标题文本 所以我不能简单地设置RowHeadersVisible false 以编程方式调整行标题的宽度 我通过代码设置行标题 因此我需要调整宽度
  • 通过Matplotlib中的OO接口获取图形管理器

    我希望能够获取创建的图形的figure manager 例如我可以使用 pyplot 界面来完成此操作 from pylab import figure plot arange 100 mngr get current fig manage
  • MS Access XML 从文本或流而不是文件导入?

    有什么简单的方法可以完成与 Application ImportXML 等效的操作 但将 XML 作为字符串或文本流而不是文件 在 Access 2003 中 我想将记录插入到一 个包含许多字段的表中 其中包含来自应用程序中不同位置的数据
  • spring资源是文件还是目录?

    我正在使用 spring Resource API 并使用 ResourcePatternResolver 来扫描我的类路径中的文件 在一种情况下 扫描会拾取预构建 jar 中的一些目录和文件以及文件系统上的一些目录和文件 在任何一种情况下
  • AppDomains 与强大的服务器

    经过一些研究后 AppDomains 似乎并不是真正构建托管服务器的工具 根据我的理解 如果创建的AppDomain中存在未处理的异常 如果从创建的AppDomain中的线程抛出异常 托管服务器仍然会崩溃 因此 在这种情况下 如果托管服务器
  • Pandas:将列与数据帧的所有其他列进行比较

    我有一个场景 我有新的受试者正在测试一系列特征 其中结果都是字符串分类值 测试完成后 我需要将新数据集与所有受试者的主数据集进行比较 并寻找给定阈值 例如 90 的相似性 匹配 因此 我需要能够以尽可能最佳的性能对新数据集中的每个新主题与主
  • 使用 Google 日历 API 发送邀请

    我有一个 Java Spring API 我想在其中集成 Google 日历 任务 基本上为两名与会者 用户 创建一个活动并向他们发送邀请 并可选择接受 拒绝 标准 GCalendar 邀请 我在这里尝试了这个例子 https develo
  • 当 super() 被调用时,元类如何与 MRO 列表一起工作?

    我对以下代码示例感到非常困惑 class Meta 1 type def call cls a kw line 1 print entering Meta 1 call print cls line 4 print cls mro line
  • RESTful Web 服务、Spring-WS 有效负载或 Spring 3 MVC REST 控制器采用哪种方式?

    我是初学者Spring Webservices 我正在尝试使用创建合同优先的网络服务spring ws 2 0 我已经做好了web xml MessageDispatcherServlet 配置 我的合约设计 XSD 生成JAXB类和服务实
  • JavaScript 中的 Math.random 和 Web 编程

    根据这个堆栈溢出线程 https stackoverflow com questions 10361466 what algorithm does math random useJavaScript 中的 Math random 取决于浏览