F# 中的线程安全正态随机数生成器

2024-02-09

需要一个从正态(高斯)分布返回样本的随机数生成器,我已将以下部分移植到 F#John D. Cook 的 C# 生成器 http://www.codeproject.com/Articles/25172/Simple-Random-Number-Generation:

let mutable m_w = 521288629u
let mutable m_z = 362436069u

let private getUint () =
    m_z <- 36969u * (m_z &&& 65535u) + (m_z >>> 16)
    m_w <- 18000u * (m_w &&& 65535u) + (m_w >>> 16)
    (m_z <<< 16) + m_w

let private setSeed () =
    let dt = System.DateTime.Now
    let x = dt.ToFileTime ()
    m_w <- uint32 (x >>> 16)
    m_z <- uint32 (x % 4294967296L)

let private getUniform () =
    let u = getUint ()
    (float u + 1.) * 2.328306435454494e-10

let private randomNormal () =
    let u1 = getUniform ()
    let u2 = getUniform ()
    let r = sqrt (-2. * (log u1))
    let theta = 2. * System.Math.PI * u2
    r * sin (theta)

/// Returns a normal (Gaussian) random sample with mean 0 and standard deviation 1
let randn () =
    setSeed ()
    randomNormal ()

/// Returns an array of normal (Gaussian) random samples
let randns n m =
    setSeed ()
    [| for i in 0 .. n - 1 -> randomNormal () |]

此实现工作正常,但不是线程安全的。鉴于依赖它的代码广泛使用线程并行库,我需要使其线程安全。

这对我来说并不明显,因为该方法的核心在于两个几乎不可或缺的可变成员。有没有其他方法可以在不使用锁的情况下实现线程安全?

有没有其他方法可以仅使用不可变成员来实现普通的伪随机生成器?


使用可变成员,你别无选择,只能使用锁。

但是,你最好使用不可变的record http://msdn.microsoft.com/en-us/library/dd233184.aspx含有m_w and m_z您传递给随机函数。他们可以返回随机值的元组和包含更新的随机成员的新​​记录。更好的是,您可以创建一个计算表达式 http://msdn.microsoft.com/en-us/library/dd233182.aspx处理生成随机数,这样您就不必担心传递随机记录。

另外,打电话setSeed从你的随机函数内部来看是很糟糕的。多次后续调用将返回相同的值。您只想设置种子一次。

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

F# 中的线程安全正态随机数生成器 的相关文章

  • Microsoft Office 应用程序的主要互操作程序集

    我正在尝试在我的 Web 服务器上安装 Microsoft Office 互操作程序集 用于从我的网站阅读 Word 文档 我可以只安装程序集吗 或者唯一的方法是安装办公套件 例外情况 Could not load file or asse
  • 如何让MCR启动时间快

    我将 matlab 程序转换为 net 程序集 即 dll 文件 我制作了一个控制台 C 应用程序 添加了 dll 文件并从 php 调用它 每次调用 exe 时都会调用 MCR 如何使 MCR 在服务器启动时初始化 并且即使在一段时间后调
  • 尝试使用 angularJS 和 c# webapi 从服务器下载文件

    将文件上传到服务器时效果很好 没有损坏的文件 但是 当我下载文件时 除了纯txt 它们起作用 它们的规模不断扩大并变得腐败 经过大量调查后 我不知道可能出了什么问题 我只是写文件 作为响应流并下载 blob 欢迎任何想法 严重依赖此线程来解
  • 使用 Youtube .net API 上传视频并将其设置为不公开

    net 的 Youtube API 似乎有一段时间没有更新了 因此 没有公开的属性或方法可以将视频设置为不列出 如果有人以前遇到过这个问题 可以建议解决方法吗 我也很难弄清楚这一点 所以我想我会将我的发现发布给任何寻求此问题答案的人 As
  • 专家 f# 脚本编译奇怪

    第 209 210 页有一个扩展示例 见下文 我使用的是 F 4 5 总之 我不明白的是 如果我单独键入每个语句 则会有一个声明引发错误 如果我立即提交整个脚本 以及引发错误的声明之后的函数 则一切正常 那么 当我批量提交所有语句时 交互中
  • C/C++ 中随机数生成器的实现[重复]

    这个问题在这里已经有答案了 我对 C 中随机数生成器的实现有点困惑 它也与 C 中的明显不同 如果我理解正确 对 srand seed 的调用会以某种方式初始化可通过 rand 访问的隐藏变量 种子 该变量又将函数指向预先生成的序列 例如例
  • TypeAccessException:尝试通过方法...访问类型...失败

    完整的异常详细信息是 System TypeAccessException occurred Message Attempt by method DynamicClass System Text StringBuilder System O
  • 从上下文无关语法生成 n 个语句

    因此 不是为了重新发明轮子 我想知道从上下文无关语言生成随机语句 如 yacc 等生成的语句 已经做了哪些工作 这些语法主要用于解析 但也许有人已经做了一些生成来测试解析器 谢谢 查看这篇博文 http eli thegreenplace
  • 开始使用 BouncyCastle crypto dll c#

    我是密码学初学者 我想将 BouncyCastle dll 用于 c 但我找不到文档和示例 特别是 我需要使用 pkcs 7 p7m 结果 对文件进行签名 并向其中添加符合 RFC 3161 标准的来自受信任服务器的时间戳 m7m 结果 有
  • 为什么在此实例中 System.MidpointRounding.AwayFromZero 不进行舍入?

    在 NET 中 为什么System Math Round 1 035 2 MidpointRounding AwayFromZero 产量 1 03 而不是 1 04 我觉得我的问题的答案就在标有 来电者须知 的部分中http msdn m
  • 在 .NET 中使用 NTFS 压缩来压缩文件夹

    我想在 NET 中使用 NTFS 压缩来压缩文件夹 我发现这个帖子 http bytes com groups net c 262874 making folder compressed 但它不起作用 它抛出异常 无效参数 Director
  • 任务取消最佳实践

    假设我有一个处理器 其工作是将文件保留回磁盘 这是作为Task当观察一个BlockingCollection
  • 在 TaskCompletionSource.Task(已调用 .SetResult)上调用ContinueWith 方法是否安全?

    使用是否安全ContinueWith 上的方法TaskCompletionSource Task if the TaskCompletionSource SetResult 已经被调用了 这个基本代码有望有助于解决这个问题 this was
  • 强制 Excel 将多张纸作为单个作业打印

    在某些 Excel 2003 工作簿中 当我尝试print如果有多个工作表 Excel 将这些工作表视为单独的打印作业 这让我一直在编写的 Excel 自动化应用程序感到困惑 因为它会导致 Adob e PDF Printer 停止并询问用
  • .NET 4.5 CustomReflectionContext:它有什么用?

    NET Framework 4 5 开发者预览版中的新增功能 http msdn microsoft com library ms171868 28v vs 110 29 aspx提及 能够自定义反射上下文以覆盖默认值 反射行为通过自定义R
  • 在 C# 中实例化 python 类

    我已经用 python 编写了一个类 我想通过 IronPython 将其包装到 net 程序集中 并在 C 应用程序中实例化 我已将该类迁移到 IronPython 创建了一个库程序集并引用了它 现在 我如何真正获得该类的实例 该类看起来
  • .NET 进程分配的内存何时释放回 Windows

    设置 NET 在启动时以及在收集后尝试满足分配请求时 分段为每一代的堆 0 1 2 LOH 分配内存 以获得连续的内存块 为每个堆分配的内存可能会随着应用程序 预热 而趋于平稳 但第 2 代和大型对象堆可能除外 在垃圾收集期间 每个堆 0
  • 当应用程序未聚焦时监听按键

    我有一个应用程序 C 4 0 WPF 它是隐藏的 可以通过单击系统托盘图标或我创建的其他框架 停靠在左侧和最上面的小框架 来显示 My customer wants to add a new way to display the appli
  • Java 中有类似 .NET 的 NotImplementedException 的东西吗?

    有没有类似 NET 的东西NotImplementedException在Java中 康芒斯朗 http commons apache org proper commons lang javadocs api 2 6 org apache
  • 正则表达式基于组的不同替换?

    所以我对正则表达式比较陌生 并且做了一些练习 我正在玩一个简单的 混淆器 它只是寻找 dot or dot or at or at 不区分大小写 并且在匹配项之前或之后有或没有任意数量的空格 这是针对通常情况的 someemail AT d

随机推荐

  • Django:更新页面而不重新加载

    我想更新我的主页 html使用按钮操作并显示来自服务器的一些结果 但问题是 当我单击按钮时 整个页面都会重新加载 在这里 我的项目名称是 T2KG 我的表单标签如下所示
  • 如何实现Memcached与数据库同步

    AFAIK Memcached 不支持与数据库同步 至少是 SQL Server 和 Oracle 我们计划将 Memcached 免费 与我们的 OLTP 数据库结合使用 在某些业务流程中 我们进行一些繁重的验证 这需要从数据库中获取大量
  • C# HttpClient.SendAsync 等待抛出 NullReferenceException

    首先 我正在尝试为产品构建一个插件 因此环境不是我的 而且我对正在发生的事情没有太多了解 据我所知 系统正在运行 NET Framework 4 6 2 并且我已尝试确保所有依赖项都与系统上的依赖项相匹配 我看到的问题是 当我发出await
  • 如何融化 pandas 数据框?

    On the pandas questions tagged pandas标签 我经常看到用户询问有关在 pandas 中融化数据框的问题 我将尝试针对这个主题进行规范的问答 自我回答 我要澄清一下 什么是熔化 如何使用熔体 什么时候使用熔
  • 如何在 Rust 中使用单一方法创建文件及其父目录?

    我可以打开一个文件来创建它及其父目录吗OpenOptions或者类似的单一方法 这只会创建一个新文件 如果我的路径包含不存在的目录 它将不起作用 pub fn save file file path String gt Result lt
  • 如何在文本字段中模拟退格操作?

    当按下按钮时 我只想在常规文本框中模拟 退格 删除光标左侧的字符 谷歌和各种论坛正在就此产生非常随机的结果 执行此操作的正确方法是什么 这似乎在 Safari 中有效 也可能在 Firefox 中有效 但我还没有在 IE 中测试过它 fun
  • 获取当前系统时间?

    使用 Objective C 获取当前时间 HH MM SS 的最佳方法是什么 我想我应该看看 NSDate 和 NSDateFormatter 我快速浏览了一下文档 它看起来比我预期的要复杂一些 所以我想我应该在这里检查一下以确保我走在正
  • 是否可以将构建时间插入到应用程序中?

    A game has this 我很好奇这是否是实际的构建时间 果然 文件上次修改 日期Crysis exe 该程序 是03 31 2009 01 40 当然 开发人员可以轻松地手动输入该值 并在一分钟内构建应用程序 但我很好奇当应用程序实
  • 画布图像直到第二次尝试才​​显示

    我正在尝试使用该元素绘制静态 Google 地图图像 一旦用户单击提交按钮 该图像就会出现在屏幕上 html 看起来像这样
  • AWS SNS 通过 Cognito 身份 ID 发布给特定用户

    我在这里尝试做的是 当特定用户属于新添加的 DynamoDB 项目的一部分时 通过 SNS 和 APNS 发送通知 我想将其发送给用户 Cognito 身份 ID 而不是设备令牌 因此 在添加项目时应该触发 Lambda 然后检查 Cogn
  • iPython Notebook Markdown 单元中的语法突出显示

    有没有办法让 iPython Notebooks 中的 Markdown 单元格突出显示代码块中的语法 例如 在GitHub中 可以通过以下方式获得所需的效果 python gt gt gt print hello The GitHub 上
  • ASP.NET - 如何使用 C# 显示 javascript 警报?

    我有一个包含文本框和按钮的页面 当用户单击提交按钮时 我想显示基于布尔值的消息 我研究过 stackoverflow 并尝试了这个问题中的代码 Asp net Webform 显示警报和重定向 https stackoverflow com
  • validateImageData 参数和 Image.FromStream()

    我担心这个重载中的第三个参数 validateImageData 文档没有对此进行太多解释 它只说明它会导致图像数据被验证 但没有详细信息 到底是做什么来验证图像数据的 public static Image FromStream Stre
  • 如何在 Google App Engine 数据存储中插入批量数据?

    我有一些城市 州和国家的 CSV 文件及其 ID 名称等 我想将所有这些数据放入 Google 应用程序引擎数据存储中 有人可以建议一种在开发服务器和生产服务器上执行此操作的有效方法吗 提前致谢 你很幸运 您描述的功能已融入 appcfg
  • 在 mqtt.js 中发布无法访问的主题时如何捕获“访问错误”?

    我正在使用带有 mqtt js 的 node js 和 mosquitto 代理创建一个项目 在 mosquitto 配置文件中 我设置了 pwfile aclfile 来控制哪个用户可以访问哪个主题 如果用户名 密码 发布主题和订阅主题正
  • 我的 MainActivity 类在扩展 ActionBarActivity 时抛出 java.lang.ClassNotFoundException

    我按照其他线程中指示的有关如何导入外部库的说明进行操作 但是将 android support v7 appcompat jar 导入到我的 Android 项目的引用库 在 ADT v 22 0 5 中 后 我得到了 java lang
  • 如何使用反射获取类及其基类(层次结构上方)的所有属性? (C#)

    所以我现在所拥有的是这样的 PropertyInfo info obj GetType GetProperties BindingFlags Public where obj是某个对象 问题是我想要的一些属性不在其中obj GetType
  • 如何将 ng-bootstrap 与 AngularJS 2 一起使用(使用 angular-cli v1b15)?

    我一直在尝试按照 ng bootstrap 官方网站上的文档在我的 Angular 2 项目中使用 ng bootstrap 我所做的如下 npm install email protected cdn cgi l email protec
  • 如何以编程方式读取 iPhone iOS 5 上的通话记录

    我发现了很多在 iOS 4 上读取通话记录的代码示例 但似乎 iOS 5 上没有启用此功能 读取通话记录 DB 那么解决方法是什么呢 有没有任何 第三方 方法或技巧可以读取 iOS 5 中的通话记录 看看SpyPhone https git
  • F# 中的线程安全正态随机数生成器

    需要一个从正态 高斯 分布返回样本的随机数生成器 我已将以下部分移植到 F John D Cook 的 C 生成器 http www codeproject com Articles 25172 Simple Random Number G