1

可能重复:
如何生成 0 和 1 之间的随机浮点数?

我想生成一个介于 0 和 1 之间的随机数(均匀分布),我使用:

float x = arc4random_uniform(1);

但是,这只会产生 0.00000

我用了

float y = arc4random() %11 * 0.1;

它在间隔中返回一个随机数,但我不确定它是否是均匀分布。

为什么第一个功能没有按预期工作?

4

4 回答 4

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;

还,

我不确定它是否是均匀分布。

既然不是。使用模 ( %) 运算符会导致分布不均匀。

于 2012-11-28T18:11:27.250 回答
2

根据文档, arc4random_uniform 返回一个整数,因此使用上限为 1 不会产生您想要的结果。

这是 arc4random 函数的页面: http ://www.unix.com/man-page/FreeBSD/3/arc4random_uniform/

于 2012-11-28T18:10:09.470 回答
0

arc4random_uniform 返回一个不超过您提供的上限的数字(例如 arc4random_uniform(10) 将返回一个介于 0 和 9 之间的数字)。由于 arc4random_uniform(1) 应该总是返回 0 (这就是你所看到的)。如果你想要一个随机浮动,你应该看到这个答案:

生成 0 到 1 之间的随机浮点数

于 2012-11-28T18:15:28.007 回答
0
#define ARC4RANDOM_MAX      0x100000000
...
double val = ((double)arc4random() / ARC4RANDOM_MAX);
于 2012-11-28T18:12:00.267 回答