在不包括子范围的范围内获得随机浮动

本文关键字:随机 范围内 不包括 范围 | 更新日期: 2023-09-27 18:22:08

如何获得一个范围内的随机浮点值,不包括子范围?到目前为止,我唯一的想法是创建两个范围,并从这两个范围中随机选择。我必须使用在unity3d引擎中找到的float Random.Range(float min, float max)方法,所以代码将是:

float GetRandomNumber(float min, float max, float minExclusive, float maxExclusive)
{
    float outcome;
    if (Random.Range(0, 1) < 0.5f)
        outcome = Random.Range(min, minExclusive);
    else
        outcome = Random.Range(maxExclusive, max);
    return outcome;
}

我可以放心地假设min < minExclusive < maxExclusive < max

我试着在谷歌上搜索,但我发现的唯一类似的问题是整数,它们的行为有点不同(例如,你可以很容易地迭代它们):

  • 生成排除范围的随机数
  • 如何在一定范围内生成一个随机数,但排除一些

有人有更好的主意吗?

在不包括子范围的范围内获得随机浮动

实现这一点的一种方法是生成忽略范围的随机数,然后适当地移动值。这应该确保在一组可接受的值上均匀分布(假设这是您想要的):

var excluded = maxExclusive - minExclusive;
var newMax = max - excluded;
var outcome = Random.Range(min, newMax);
return outcome > minExclusive ? outcome + excluded : outcome;