gpt4 book ai didi

objective-c - 使用 arc4random 随机化 float ?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:49:13 25 4
gpt4 key购买 nike

我有一个 float ,我试图获得一个介于 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);
}

Edit2:好的,现在我的方法是这样的:

-(float)randomFloatBetween:(float)num1 andLargerFloat:(float)num2
{
float range = num2 - num1;
float val = ((float)arc4random() / ARC4RANDOM_MAX) * range + num1;
return val;
}

这会产生 1.624566 等数字吗?因为我只想说 1.5、1.6、1.7、1.8、1.9 和 2.0。

最佳答案

您可以生成一个从 0 到 0.5 的随机 float ,然后加上 1.5。

编辑:

您走在正确的轨道上。我会使用可能的最大随机值作为除数,以便在可能的值之间获得最小的间隔,而不是你正在进行的这种任意除以 10,000 的操作。所以,将 arc4random() 的最大值定义为一个宏(我刚在网上找到这个):

#define ARC4RANDOM_MAX      0x100000000

然后获取 1.5 到 2.0 之间的值:

float range = num2 - num1;
float val = ((float)arc4random() / ARC4RANDOM_MAX) * range + num1;
return val;

如果您需要,这也将为您提供 double (只需将 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;

关于objective-c - 使用 arc4random 随机化 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8060753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com