gpt4 book ai didi

ios - 两个范围之间的随机数

转载 作者:行者123 更新时间:2023-11-28 18:56:04 25 4
gpt4 key购买 nike

我试图在 Objective-C 中生成两个范围之间的随机数。例如在 [-50;-30][30,50] 之间。

我在 [-50,50] 之间做到了,但我需要消除 [-30,30] 之间的所有值。

int rads = -50 + arc4random() % (50 - (-50));

感谢您的帮助。

最佳答案

以之前的答案(已删除)为基础:

  1. 使用arc4random_uniform

  2. 使用正确的上限和正确的算法

关于 1:arc4random_uniform(50) 将产生一个介于 0 和 49 之间的数字(含 0 和 49)。它将通过正确的非固定分布产生该值。仅使用 arc4random % something 会引入模偏差。

关于 2:您正在尝试检索40 个值,而是 42 个,因为您还希望能够检索上限值和下限值。如果我们简化边界,我们可以更好地看到错误,假设 [-5;-3][3;5]:你想要数字 -5 ,-4,-3,3,4,5 六个值,而不是 4 个。

解决方案:

int rads = arc4random_uniform(42) - 20; // values between -20 and 21 inclusive, 42 different numbers
if (rads <= 0) { // subtract from the lower 21 values [-20;0]
rads = rads - 30; // [-50;-30]
} else { // add to the upper 21 values [1;21]
rads = rads + 29; // [30;50]
}

更一般对称上下界

int lower = 30;
int upper = 50;
int diff = upper - lower;
int rads = arc4random_uniform((diff + 1) * 2) - diff; // values between -diff and (diff+1) inclusive, ((diff+1)*2) different numbers
if (rads <= 0) { // subtract from the lower (diff+1) values [-diff;0]
rads = rads - lower; // [-upper;-lower]
} else { // add to the upper 21 values [1;diff+1]
rads = rads + lower - 1; // [lower;upper]
}

请注意,您可以通过将条件减法移动到初始 rads 计算并更改后面的加法和加法条件来稍微简化代码。但这会使代码的可读性和直观性降低一些。

关于ios - 两个范围之间的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32570018/

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