[英]random number generator objective c [duplicate]
可能重复:
如何生成介于0和1之间的随机浮点数?
我想生成一个介于0和1(均匀分布)之间的随机数,我使用:
float x = arc4random_uniform(1);
但是,这仅产生0.00000
我用了
float y = arc4random() %11 * 0.1;
它在间隔中返回一个随机数,但我不确定它是否均匀分布。
为什么第一个功能不能按预期工作?
我用:
float x = arc4random_uniform(1);
但是,这仅产生0.00000
当然可以。 arc4random_uniform()
返回32位无符号整数。 它不返回float
。 您正在寻找的是类似
#define RAND_PRECISION 1024
float x = arc4random_uniform(RAND_PRECISION) / (float)RAND_PRECISION;
也,
我不确定它是否均匀分布。
既然不是。 使用模( %
)运算符会导致分布不均匀。
根据文档,arc4random_uniform返回一个整数,因此使用上限为1的整数将无法产生所需的结果。
这是关于arc4random函数的页面: http : //www.unix.com/man-page/FreeBSD/3/arc4random_uniform/
#define ARC4RANDOM_MAX 0x100000000
...
double val = ((double)arc4random() / ARC4RANDOM_MAX);
arc4random_uniform返回一个数字,直到您提供的上限(例如arc4random_uniform(10)将返回一个介于0和9之间的数字)。 由于这个原因,arc4random_uniform(1)应该总是返回0(这就是您所看到的)。 如果您想要一个随机浮动,则应该看到以下答案:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.