Sim*_*iwi 2 random objective-c ios
我有一个浮点数,我试图得到一个介于1.5 - 2之间的随机数.我在网上看过教程,但是在我的情况下,所有这些都是0到数字而不是1.5的随机化.我知道这是可能的,但我一直在摸索如何实现这一目标.谁能帮我?
Edit1:我在网上找到了以下方法,但我不想要所有这些小数位.我只想要5.2或7.4之类的东西......
我该如何调整这种方法来做到这一点?
-(float)randomFloatBetween:(float)num1 andLargerFloat:(float)num2
{
int startVal = num1*10000;
int endVal = num2*10000;
int randomValue = startVal + (arc4random() % (endVal - startVal));
float a = randomValue;
return (a / 10000.0);
}
Run Code Online (Sandbox Code Playgroud)
Edit2:好的,现在我的方法是这样的:
-(float)randomFloatBetween:(float)num1 andLargerFloat:(float)num2
{
float range = num2 - num1;
float val = ((float)arc4random() / ARC4RANDOM_MAX) * range + num1;
return val;
}
Run Code Online (Sandbox Code Playgroud)
这会产生像1.624566等数字吗?因为我只想说1.5,1.6,1.7,1.8,1.9和2.0.
Luk*_*uke 10
您可以生成从0到0.5的随机浮点数并添加1.5.
编辑:
你走在正确的轨道上.我会使用可能的最大随机值作为你的除数,以便在可能的值之间得到最小的间隔,而不是你所进行的任意除法.所以,将arc4random()的最大值定义为宏(我刚刚在网上找到):
#define ARC4RANDOM_MAX 0x100000000
Run Code Online (Sandbox Code Playgroud)
然后得到1.5到2.0之间的值:
float range = num2 - num1;
float val = ((float)arc4random() / ARC4RANDOM_MAX) * range + num1;
return val;
Run Code Online (Sandbox Code Playgroud)
如果你需要它,这也会给你双精度(只需替换float为double.)
再次编辑:
是的,当然这会给你带有多个小数位的值.如果你只想要一个,只需产生一个从15到20的随机整数除以10.或者你可以随后砍掉额外的位置:
float range = num2 - num1;
float val = ((float)arc4random() / ARC4RANDOM_MAX) * range + num1;
int val1 = val * 10;
float val2= (float)val1 / 10.0f;
return val2;
Run Code Online (Sandbox Code Playgroud)
arc4random是一个32位发生器.它生成了Uint32.最大值arc4random()是UINT_MAX.(不要使用ULONG_MAX!)
最简单的方法是:
// Generates a random float between 0 and 1
inline float randFloat()
{
return (float)arc4random() / UINT_MAX ;
}
// Generates a random float between imin and imax
inline float randFloat( float imin, float imax )
{
return imin + (imax-imin)*randFloat() ;
}
// between low and (high-1)
inline float randInt( int low, int high )
{
return low + arc4random() % (high-low) ; // Do not talk to me
// about "modulo bias" unless you're writing a casino generator
// or if the "range" between high and low is around 1 million.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6855 次 |
| 最近记录: |