首页 文章

C()中的Stata随机数生成器

提问于
浏览
2

我在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找到 a C实现 . 但KISS有几种变体,似乎还有一点工作要做一个Stata风格的种子,并产生统一的数字(Stata博客建议我们采用32位int生成的二进制扩展并返回0.binary_expansion ) .

有没有人已经编写过C / C代码来复制从Stata的uniform()返回的数字?

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

1 回答

  • 1

    我最终发现可以通过plugin从Stata中调用C / C代码 .

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

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

相关问题