"runif"函数在R中是如何工作的?

3

我正在尝试在R中生成一组均匀分布的数字。我知道我们可以使用R中的"runif"函数来实现相同的功能。但我真的想了解开发这个函数背后的思想。也就是说,"runif"函数的代码如何工作。因此,简而言之,我想创建自己的函数,可以完成与"runif"相同的任务

1个回答

6

最终,runif 调用一个伪随机数生成器。其中一种较简单的可以在 此处 找到,它是在 R 代码库中以 C 语言编写的,应该很容易模拟。

static unsigned int I1=1234, I2=5678;

void set_seed(unsigned int i1, unsigned int i2)
{
    I1 = i1; I2 = i2;
}

void get_seed(unsigned int *i1, unsigned int *i2)
{
    *i1 = I1; *i2 = I2;
}


double unif_rand(void)
{
    I1= 36969*(I1 & 0177777) + (I1>>16);
    I2= 18000*(I2 & 0177777) + (I2>>16);
    return ((I1 << 16)^(I2 & 0177777)) * 2.328306437080797e-10; /* in [0,1) */
}

实际上,这个过程会将初始整数种子值按位混合,然后通过乘以一个小的常量来重新转换为双精度浮点数,使得这些双精度浮点数标准化到 [0, 1) 范围内。


into the [0,1) range - Severin Pappadeux
1
@user2554330 你说得对,虽然这可能是一个更容易模拟的算法,适合楼主使用。 - Allan Cameron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接