b*****n 发帖数: 685 | |
j*****4 发帖数: 292 | 2 use rand() in stdlib.h
【在 b*****n 的大作中提到】 : 要做MCMC,盼高手解答,谢谢
|
b*****n 发帖数: 685 | 3 你是说rand()/RAND_MAX? 我知道这个,但是产生的好像不是uniform的。你可以试试,
因为rand()产生的数很集中。
【在 j*****4 的大作中提到】 : use rand() in stdlib.h
|
b*****n 发帖数: 685 | 4 发现了一个办法用Mersenne twister,
怎么版上没人用C么? |
b*****n 发帖数: 685 | 5 又钻研了一下,发现最简单的办法是从偷R里面的code了,啥样的分布都行,呵呵,幸
好R本身就是调用C的。 |
D******n 发帖数: 2836 | 6 where ah? i always though rand() generates uniform distribution
【在 b*****n 的大作中提到】 : 又钻研了一下,发现最简单的办法是从偷R里面的code了,啥样的分布都行,呵呵,幸 : 好R本身就是调用C的。
|
b*****n 发帖数: 685 | 7 你可以试试rand()产生unif(0,1),我试了rand()/RAND_MAX不行,用求余之类的方法我
也不放心。 |
b*****n 发帖数: 685 | 8 最后还剩一个问题悬而未决:不知道R具体怎么实现set.seed()的,调用的什么C
routine?专家现身一下吧。 |
A****t 发帖数: 141 | 9 numerical recipes里面介绍了很多种方法
也有很多人直接用rand() |
m**********r 发帖数: 507 | 10 google "GNU Scientific Library" |
b********p 发帖数: 875 | 11 double randomGen()
{
int kkk,iran;
kkk = iSeed1 / 53668;
iSeed1 = 40014 * (iSeed1 - kkk * 53668) - kkk * 12211;
if(iSeed1 < 0) iSeed1 = iSeed1 + 2147483563;
kkk = iSeed2 / 52774;
iSeed2 = 40692 * (iSeed2 - kkk * 52774) - kkk * 3791;
if(iSeed2 < 0) iSeed2 = iSeed2 + 2147483399;
iran = iSeed1 - iSeed2;
if(iran < 1) iran = iran + 2147483562;
return (iran * 4.656612873e-10);
} |
b*****n 发帖数: 685 | 12 这是啥啊?
【在 b********p 的大作中提到】 : double randomGen() : { : int kkk,iran; : kkk = iSeed1 / 53668; : iSeed1 = 40014 * (iSeed1 - kkk * 53668) - kkk * 12211; : if(iSeed1 < 0) iSeed1 = iSeed1 + 2147483563; : kkk = iSeed2 / 52774; : iSeed2 = 40692 * (iSeed2 - kkk * 52774) - kkk * 3791; : if(iSeed2 < 0) iSeed2 = iSeed2 + 2147483399; : iran = iSeed1 - iSeed2;
|
w**********y 发帖数: 1691 | |
w********3 发帖数: 13 | 14 看numerical recipe
用周期更高的算法 比如2^64 |