C#Mersenne Twister随机整数发生器实现(SFMT)蒙特卡罗模拟

C#Mersenne Twister随机整数发生器实现(SFMT)蒙特卡罗模拟,第1张

概述到目前为止,我一直在使用此处的C# Mersenne Twister生成随机数: http://www.centerspace.net/resources.php 我刚刚发现了SFMT,它的速度应该是这里的两倍: http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/ 有人能指出我在SFMT的C#实现吗? 我的要求是在(和包括)0和2 ^ 20( 到目前为止,我一直在使用此处的C# Mersenne Twister生成随机数:

http://www.centerspace.net/resources.php

我刚刚发现了SFMT,它的速度应该是这里的两倍:

http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/

有人能指出我在SFMT的C#实现吗?

我的要求是在(和包括)0和2 ^ 20(1048576)之间生成一个整数.

我需要每天花费数万亿次进行24小时制模拟,所以我准备好花几天时间来完善它.

目前我通过添加一种符合我要求的新方法调整了Center Space Mersenne Twister:

public uint Next20(){                return (uint)(genrand_int32() >> 12);}

使用方法genrand_int32()我想生成我自己的版本genrand_int20(),它在(和包括)0和2 ^ 20之间生成一个整数,以保存在上面的转换和转移但我不懂数学.究竟我该怎么做?

还使用uint比int更快,或者只是可寻址数字的问题?因为我只需要1048576,我只关心速度.

此外,它将在带有.NET 2的windows Server 2003 R2 SP2(32位)盒上运行.处理器为AMD Opteron 275(4核).

解决方法 你可以做的是下载你在Code Project上发现的 source from the link.解压缩,在Visual Studio中加载解决方案并进行编译.这将为您提供源,非托管c dll和.lib文件.

你可以在这个dll中调用/调用函数,(只导出5个简单函数,你只需要两个)或者你可以使用这个dll,lib和SFMT头文件创建一个你可以使用的托管包装器dll在没有P / Invoke的C#中.我只是尝试了这种方法,这很简单.没有明确的编组参与.

这是如何做.下载并编译源代码(需要头文件和除dll之外创建的lib文件)后,创建一个新的C CLR类库项目.称之为WrapSFMT或其他东西.去项目属性.在C / @R_173_3013@ headers下,更改为“Not using @R_173_3013@ headers”.在链接器/常规/附加库目录下,输入SFMT.lib的路径.在“链接器/输入/附加依赖项”下,添加SFMT.lib.关闭属性页面.将SFMT.h复制到项目文件夹并将其包含在项目中.

编辑WrapSFMT.h如下:

#pragma once#include "SFMT.H"using namespace System;namespace WrapSFMT {public ref class SRandom{public:SRandom(UInt32);public:UInt32 Rand32(voID);};}

这些声明了您班级中的方法.现在编辑WrapSFMT.cpp来阅读:

#include "WrapSFMT.h"namespace WrapSFMT {SRandom::SRandom(UInt32 seed){    init_gen_rand(seed);}UInt32 SRandom::Rand32(){    return gen_rand32();}}

这些实现了您在头文件中声明的方法.您所做的只是从SFMT.dll调用函数,C/C++li自动处理从非托管到托管的转换.现在,您应该能够构建WrapSFMT.dll并在C#项目中引用它.确保SFMT.dll在路径中,您应该没有问题.

总结

以上是内存溢出为你收集整理的C#Mersenne Twister随机整数发生器实现(SFMT)蒙特卡罗模拟全部内容,希望文章能够帮你解决C#Mersenne Twister随机整数发生器实现(SFMT)蒙特卡罗模拟所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1238928.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存