在不包括子范围的范围内获取随机浮点数

时间:2014-09-17 12:48:54

标签: c# random

如何在一个范围内获得随机浮点数,不包括子范围?到目前为止,我唯一的想法是创建两个范围,然后从这两个范围中随机选择。我必须使用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

我尝试使用谷歌搜索,但我发现的唯一类似问题涉及整数,并且它们的行为有点不同(例如,您可以轻松地迭代它们):

有没有人有更好的主意?

1 个答案:

答案 0 :(得分:4)

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

var excluded = maxExclusive - minExclusive;
var newMax = max - excluded;
var outcome = Random.Range(min, newMax);

return outcome > minExclusive ? outcome + excluded : outcome;