用C(++)实现STATA随机数生成器 [英] Stata random number generator in C(++)

查看:17
本文介绍了用C(++)实现STATA随机数生成器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在用C++重写(并并行化)一些Stata模拟。

出于测试目的,我想使用Stata的随机数。

到目前为止,我的方法是在Stata中生成数字,将它们转储到CSV文件(100S MB),然后在我的C++程序中读取该文件。这是缓慢和不雅的。

理想情况下,我希望用C++代码生成相同的制服。

我读到过Stata使用KISS算法(引用http://blog.stata.com/tag/random-numbers/)。我在http://www0.cs.ucl.ac.uk/staff/d.jones/GoodPracticeRNG.pdf找到一个C实现。但是KISS有几个变种,而且似乎还需要做一些工作才能使它接受单一Stata样式的种子,并产生统一的数字(Stata博客建议我们对产生的32位int进行二进制扩展,并返回0.BINARY_EXPANSION)。

是否有人已经编写了C/C++代码来复制从Stata的Uniform()返回的数字?

编辑:使用Stata的"设置种子"计算的KISS SEED似乎依赖于一个秘密函数。引用=http://hsphsun3.harvard.edu/cgi-bin/lwgate/STATALIST/archives/statalist.1210/date/article-1132.html

推荐答案

我最终发现可以通过plugin从Stata内部调用C/C++代码。

特别是可以在Stata中使用C++11的Mersenne Twister RNG。

代码(cpprandom.cpp)和演示(cpprandom.do)在我的github account上。您需要Stata plugin website中的文件stplugin.c和stplugin.h(当然,还有一个现代的C++编译器)。

这篇关于用C(++)实现STATA随机数生成器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆