gpt4 book ai didi

r - runif() 真的有文档中所述的范围 : 0<= runif(n) <= 1, 吗?

转载 作者:行者123 更新时间:2023-12-01 08:48:46 24 4
gpt4 key购买 nike

我是 R 的新手,但文档中指出 runif(n) 返回一个 0 到 1 范围内的数字,这让我感到惊讶。
我希望 0 <= runif(n) < 1 - 包括 0,不包括 1。

我用 n = 100,000,000 对其进行了测试,发现它从未产生 0 或 1。我意识到在浮点中实际命中特定值的概率非常小,但仍然......(之间有类似 2^53 的值0 和 1 double )。

所以我查看了 R 的源代码,发现在 r-source-trunk\src\nmath\runif.c

do 
{
u = unif_rand();
} while (u <= 0 || u >= 1);
return a + (b - a) * u;

因此,按照设计,尽管有文档,它永远不会返回 0 或 1。
这不是bug吗?

或者至少文档有问题?

最佳答案

底层统一随机数函数定义为here最终输出使用这个函数:

static double fixup(double x)
{
/* ensure 0 and 1 are never returned */
if(x <= 0.0) return 0.5*i2_32m1;
if((1.0 - x) <= 0.0) return 1.0 - 0.5*i2_32m1;
return x;
}

尽管如此,还是有形式为 /* in [0,1) */ 的评论。对于每个生成器的返回函数,我认为这是上面给出的错误。

当然,您在 runif.c 中注意到的代码前面是:
/* This is true of all builtin generators, but protect against
user-supplied ones */

因此,除非@JesseTweedle 提到的情况,否则永远不会返回最小值或最大值,而仅调用 runif() 时情况并非如此。 .

作为引用,魔值 i2_32m11/(2^32-1)所以你可以从默认生成器中得到的最小值是 1/(2^33-2)大约是 1.16e-10 .最大值是这个小于 1 的数量。

关于r - runif() 真的有文档中所述的范围 : 0<= runif(n) <= 1, 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48427049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com