Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 什么';在floatA和floatB之间获得随机浮点数的最佳方法是什么?_Iphone_Objective C_Cocoa Touch - Fatal编程技术网

Iphone 什么';在floatA和floatB之间获得随机浮点数的最佳方法是什么?

Iphone 什么';在floatA和floatB之间获得随机浮点数的最佳方法是什么?,iphone,objective-c,cocoa-touch,Iphone,Objective C,Cocoa Touch,我有一个由两个浮点数组成的区间,需要生成20个随机数,在这两个浮点数定义的区间之间 比如说: float a = 12.49953f float b = 39.11234f float r = //best way to get best randomly numbers between a and b 随机数可以是==a和==b。你有什么建议?我知道所有的计算机和语言都有随机数的问题,并且有很多方法来生成它们。但我在目标c方面没有经验 非常重要的是,在循环中生成的20个数字的一个块中,生成的

我有一个由两个浮点数组成的区间,需要生成20个随机数,在这两个浮点数定义的区间之间

比如说:

float a = 12.49953f
float b = 39.11234f
float r = //best way to get best randomly numbers between a and b
随机数可以是==a和==b。你有什么建议?我知道所有的计算机和语言都有随机数的问题,并且有很多方法来生成它们。但我在目标c方面没有经验

非常重要的是,在循环中生成的20个数字的一个块中,生成的数字是不同的。我想我会制作一个方法,将数字放入一个数组中,检查生成的数字是否与数组中的所有其他数字不同,如果没有,我会生成另一个

我试过这个:

CGR=1+arc4random()%5


但这只会生成整数,大多数情况下,我会一个接一个地得到相同随机数的2倍。

通常,随机函数会得到一个介于0和1(不包括1)之间的随机数。 这可以通过将随机数乘以a和b之间的间隔长度并加上较低的值来均匀地扩展到所需的间隔

带着 对于具有20个不同随机数的问题: 有20个数字-我会创建某种数组,并按照您的建议每次进行线性搜索。这很容易实现,不会出现故障,并且易于调试。这可以节省您解决更复杂问题的时间。20足够低,线性搜索不会对性能产生重大影响。

试试这个

float a = 12.49953f;
float b = 39.11234f;
int startVal = a*10000;
int endVal = b*10000; 

srandom((unsigned)(mach_absolute_time() & 0xFFFFFFFF));
int randomValue = startVal+ (random() % (endVal - startVal));

float r = (float)randomValue / 10000.0f; 

这就是我使用的,相当于python的random.uniform()


arc4random_均匀分布给出了一个非常好的均匀分布。乘以1000允许处理数小于1。增加乘法器(和除数)以提高精度。

使用arc4random获取浮点值时,最好将其除以最大值。这将为您提供一个范围为0到1的浮点值,具有相当高的精度。而不是从1-100得到1-2-3-4的值

#define ARC4RANDOM_MAX  0x100000000
float r = ((double)arc4random() / ARC4RANDOM_MAX);
正如托比亚斯所说,要想得到一个范围,你需要使用

float result = a + ((b-a)*r);

尝试使用arc4random()。我用过它,它给出了各种各样的值srandom arc4random或random与arc4random之间的区别是什么?arc4random似乎工作得最好。random()函数返回一个整数
#define ARC4RANDOM_MAX  0x100000000
float r = ((double)arc4random() / ARC4RANDOM_MAX);
float result = a + ((b-a)*r);