根据输入添加或减去固定值的优雅方式

本文关键字:方式 输入 添加 | 更新日期: 2023-09-27 18:11:42

听我说一分钟。

我有一个方法,应该根据给定的输入添加或减去固定值。

我知道我的最大值是1.0f,最小值是0.0f。固定值为0.1f

现在,如果输入值是1.0f,该方法应该减去,直到值是0f。如果输入值为0f,则该方法应添加0.1f,直到值为1.0f

所以0f1f的工作方法是:

void Foo(float input) {
    float step = .1f;
    for (float i=0f; i<=1f; i += step) {
        input = i;
    }
}

显然,我可以有一个if语句检查输入值,但有没有另一种方法来实现这在一个方法?我觉得我在这里漏掉了一个非常基本的算术运算

根据输入添加或减去固定值的优雅方式

只是一个建议

我认为step可以根据初始值调整为正或负,并使用do-while使其第一次运行,直到达到最终值。

基于你的代码

void Foo(float input) {
    float step = input == 0f ? .1f : -0.1f;
    do 
    {
        input = input + step
    } while (input > 0f && input < 1.0f);
}

如果您真的想避免在步骤中使用If语句,您可以直接从输入中派生它。反过来,你可能会得到一些额外的数字错误,但由于你已经使用浮点数,这可能不是你所关心的。

void foo(float input)
{
    float step = (.5f - input)/5.f;
    do 
    {
        input += step;
    } while (input > 0.0f && input < 1.0f);
}

在我的机器上运行它得到

foo(1.0f) --> -7.45058e-08
foo(0.0f) --> 1