问题标签 [mersenne-twister]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cuda - 运行 mtgp32 cuRAND 设备 API 示例时出错
我正在尝试使用来自 cuRAND 的 Mersenne Twister 设备版本。我尝试在 cuRAND API 文档中使用第二个示例:
3.6。设备 API 示例
我冒昧地将代码复制到单独的 gist 中:
curand.cu
这是我在使用 CUDA Toolkit 5.5 在 9400M(CC 1.1,Mac OS X 10.8)和 GTS 250(CC 1.1,Linux)上执行代码时得到的结果。仅使用-arch=sm_20
会删除警告,但结果是相同的:
奇怪的是,在 9600 GT(CC 1.0,Linux)和 GTX 570(CC 2.0,Linux)上似乎一切正常:
我真的很想在 9400M 上运行 Mersenne Twister(最好来自 cuRAND)。可能吗?如果是这样,您对此有何建议?
谢谢!
更新:
现在我在 9600 GT (Linux) 上也遇到了错误:
偶尔我会得到以下信息(9600 GT,Linux):
注意:这可能是由托管 GPGPU 的机器负载引起的(它不是空闲的)。
smmarize:
不适用于- 9400M(Mac)、9600GT(Linux)、GTS250(Linux)
适用于- GTX570(Linux)
以上所有都在 CUDA 工具包 5.5 上运行。
c++ - c++ 11 mersenne_twister_engine 类的问题
我一直在尝试使用 c++ 11 mersenne_twister_engine 类(http://www.cplusplus.com/reference/random/mersenne_twister_engine/)来生成区间 [0,1] 中的数字,但是我在每个数字上不断得到 0。
这是我的代码片段
generator() 和 generator.max() 似乎正在工作......它只是随机的,它给了我 0!
谢谢!
objective-c - D std.random 整数和小数统一随机数生成之间的不同行为
我正在使用默认的随机数生成引擎在 D 中生成一些种子随机数,并且根据我是请求整数还是浮点/双精度随机数生成,我得到了一些“略微偏离”的值。例如这段代码:
生成这些结果:
出于某种原因,它们很接近,但相差很大。这是预期的行为吗?我对用于生成数字的方法并不完全熟悉,所以我想知道是什么导致了这种情况的发生。具体来说,我对此感到好奇的原因是我正在尝试使用MTRandom 库将一些 D 代码移植到 Objective-C :
我得到了这些结果:
与检索随机双精度数相同,但这里的整数结果更接近.. 虽然有时相差一个!712955.32 是否应该使用这种随机生成方法四舍五入到 712956?我只是不知道...
我可以确保我的种子随机整数生成在 D 和 Objective-C 之间是相同的最好方法是什么?
c - 这个函数会返回均匀分布的随机值吗?
我想返回一个范围内的统一随机值。范围的大小和最小值是预先计算的。
我正在使用广岛大学团队分发的双精度 Mersenne Twister 的参考实现。我目前正在使用dsfmt_genrand_close_open()
具有以下描述的功能:
“生成并返回一个在 [0, 1) 范围内均匀分布的双精度伪随机数”
这是功能:
此函数的输出在给定范围内是否一致?
c++ - 使用 mersenne twister c++ 生成数字 (0,1)
我正在努力将 R 代码实现为 C++,以便它运行得更快,但我在实现 mersenne twister 时遇到了困难。我只希望生成 (0,1) 之间的值。这是我与这个问题有关的内容。
我尝试除以RAND_MAX
,但这并没有产生我正在寻找的值。
提前致谢。
c++ - 特定 C++ 随机数生成的 Clang 性能下降
std::mt19937
使用 C++11 的随机模块,我在使用(32 位和 64 位版本)与uniform_real_distribution
(浮点数或双精度,没关系)结合使用时遇到了奇怪的性能下降。与 g++ 编译相比,它慢了一个数量级以上!
罪魁祸首不仅仅是 mt 生成器,因为它使用uniform_int_distribution
. 这不是一个普遍的缺陷,uniform_real_distribution
因为它与其他生成器(如default_random_engine
. 只是那个特定的组合非常慢。
我对内在函数不是很熟悉,但是 Mersenne Twister 算法或多或少是严格定义的,所以我猜在实现上的差异不能解释这种差异?测量程序如下,但这是我在 64 位 linux 机器上对 clang 3.4 和 gcc 4.8.1 的结果:
生成这个并自己尝试的程序:
分别通过clang++ -O3 -std=c++11 random.cpp
或 g++ 编译。有任何想法吗?
编辑:最后,Matthieu M. 有一个好主意:罪魁祸首是内联,或者说缺乏内联。增加 clang 内联限制消除了性能损失。这实际上解决了我遇到的一些性能异常。谢谢,我学到了一些新东西。
c++ - 如何使用 boost::random_device 生成加密安全的 64 位整数?
我想做这样的事情:
但我读到梅森捻线机在密码学上并不安全。但是,我还读到 random_device 可能是,如果它从 /dev/urandom 中提取数据,这可能在 linux 平台(我的主要平台)上。因此,如果 random_device 是非确定性随机的,并且它用于播种 mersenne twister(如上所示),那是否也使 mersenne twister 加密安全(即使它本身不是)?
我在这个领域有点新手,所以任何建议都会受到赞赏。
那么,如何生成可以存储在 uint64_t 中的加密安全 64 位数字?
谢谢,
本。
c++ - 如何在 CPP 实现中使用 MT(或类似)RNG 算法?
我想在 CPP 中实现 MT alg(遗憾的是我不能使用 C++11)我发现了很多算法,如 SFMT、dSFMT、某些版本的 Tiny MT 等;但是当我看到这些 algs 的文档时,我认为它们适用于 <0,2) 的范围(来自 doxygen 文档)
需要任何想法如何替换基本的 RNG 算法
有了更好的东西
java - MersenneTwister 没有给出随机数?
我想知道为什么下面的代码,使用 Mersenne Twister(在 java 中),无论我运行多少次,总是给出相同的 99 个数字。本质上它不是随机的?
random - PRNG 中有多少个州(比如 Mersenne Twister),下一个州的分布是什么?
对于像 Mersenne Twister 这样的周期为 2^19937-1 的 PRNG,PRNG 是否有那么多状态?即,由于PRNG没有更多的状态可以进入,所以状态开始重复?
作为跟进,假设您存在于 PRNG 的某个当前状态,下一个状态的分布是什么?我正在运行长时间的模拟,并有兴趣找出使用随机种子的一个模拟何时可能会进入另一个使用不同随机种子的模拟中存在的状态。