如何在一个范围内获得随机浮点数,不包括子范围?到目前为止,我唯一的想法是创建两个范围,然后从这两个范围中随机选择。我必须使用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
。
我尝试使用谷歌搜索,但我发现的唯一类似问题涉及整数,并且它们的行为有点不同(例如,您可以轻松地迭代它们):
有没有人有更好的主意?
答案 0 :(得分:4)
实现此目的的一种方法是生成忽略范围的随机数,然后适当地移动值。这应确保在可接受的值集合上均匀分布(假设这是您想要的):
var excluded = maxExclusive - minExclusive;
var newMax = max - excluded;
var outcome = Random.Range(min, newMax);
return outcome > minExclusive ? outcome + excluded : outcome;