随机数发生器目标c

时间:2012-11-28 18:06:39

标签: c random floating-point arc4random

  

可能重复:
  How to generate a random float between 0 and 1?

我想生成0到1之间的随机数(均匀分布),我使用:

float x = arc4random_uniform(1);

然而,这仅产生0.00000

我用过

float y = arc4random() %11 * 0.1;

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

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

4 个答案:

答案 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(这是你所看到的)。如果你想要随机浮动你应该看到这个答案:

Generate a random float between 0 and 1