繁体   English   中英

随机数生成器目标c [重复]

[英]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(这就是您所看到的)。 如果您想要一个随机浮动,则应该看到以下答案:

产生介于0和1之间的随机浮点数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM