我想生成0到1之间的随机数(均匀分布),我使用:
float x = arc4random_uniform(1);
然而,这仅产生0.00000
我用过
float y = arc4random() %11 * 0.1;
在区间中返回一个随机数,但我不确定它是否是均匀分布。
为什么第一个功能不按预期工作?
答案 0 :(得分:5)
我用:
float x = arc4random_uniform(1);
然而,这仅产生0.00000
当然可以。 arc4random_uniform()
返回一个32位无符号整数。它确实不返回float
。您正在寻找的是
#define RAND_PRECISION 1024
float x = arc4random_uniform(RAND_PRECISION) / (float)RAND_PRECISION;
此外,
我不确定它是否是均匀分布。
既然不是。使用模(%
)运算符会导致非均匀分布。
答案 1 :(得分:2)
根据文档,arc4random_uniform返回一个整数,因此使用上限为1的它将不会产生你想要的结果。
这是arc4random函数的页面: http://www.unix.com/man-page/FreeBSD/3/arc4random_uniform/
答案 2 :(得分:0)
#define ARC4RANDOM_MAX 0x100000000
...
double val = ((double)arc4random() / ARC4RANDOM_MAX);
答案 3 :(得分:0)
arc4random_uniform返回一个直到你提供的上限的数字(例如,arc4random_uniform(10)将返回0到9之间的数字)。由于arc4random_uniform(1)应该总是返回0(这是你所看到的)。如果你想要随机浮动你应该看到这个答案: