如何在两个设定值之间保持操作的输出?(限制,模数)

我想写一个操作,它接受一个数字,该数字可以取任何大于-1的值,并且只输出-1和0.5之间的数字

目前,我可以确保上述发生并且它总是输出0和1之间的数字,方法如下:

SupressedNumber = (Number)%1

对于值介于-1和0之间,我使用以下方法:

SupressedNumber = (Number)%-1

对于值介于-0.5和0之间,我使用以下方法:

SupressedNumber = (Number)%-0.5

然而,我希望将其设为**-1到小于-0.5(最大值为-0.49)**。它不必使用模数,但我觉得它是解决方案的一部分。它只需要在lua中可行。

点赞
用户7390956
用户7390956

据我所知,您想夹紧一个数在两个值之间,但其中一个是上确界,而不是最大值。让我们首先解决第一个问题:

要在两个值之间包容地夹紧一个数(例如,-1 <= number <= -0.5),您可以使用标准的lua函数math.min()math.max(),甚至可以自己编写代码,如果需要纯lua:

local function clamp(min, value, max)
    return math.max(min, math.min(max, value))
end

clamp()将返回value,但如果value小于min,它将返回min。如果它大于max,它将返回max,因此结果从未离开[-1,-0.5]。

由于您的目标是:[-1,-0.5),因此您必须妥协。计算机以有限的精度存储小数,因此您无法获得无限接近于-0.5的数字,但也许可以获得足够接近的数字。让我们创建一个变量epsilon,它表示足够接近的程度:

local epsilon = 0.00001

现在我们可以将这两个想法结合起来:

supressed_number = clamp(-1, number, -0.5 + epsilon)

这将夹紧您的数字在-1和略小于-0.5之间:

-1 <= value <= −0,49999 < -0.5

2020-12-09 01:20:14