Попытка создать функцию, которая интерполирует число с плавающей точкой в ​​ноль - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь создать плавную функцию для интерполяции числа в ноль.Проблема в том, что это не работает.В этом случае, если я увеличу число на 0,01 указанное число раз, я хочу уменьшить это число на 0,02, пока оно не станет равным нулю.Вот моя функция.

float ReduceSpeed(float x)
{
    if (x != 0f)
    {
        if (x % 0.02f != 0 && x > 0)
        {
            x = x - 0.01f;
        } else if (x % 0.02f != 0 && x < 0)
        {
            x = x + 0.01f;
        }
        else
        {
            if (x > 0f)
            {
                x = x - 0.02f;
            }
            else
            {
                x = x + 0.02f;
            }
        }
    }
    return x;
}

Я хочу использовать это для создания своего рода скользящего движения в единстве.

1 Ответ

0 голосов
/ 13 октября 2018

Скорее всего, проблема заключается в строке

if (x != 0f)

x, скорее всего, не будет точно нулевым из-за ошибок округления, поскольку 0,01 и 0,02 являются периодическими числами в базе 2. Вы должны выбратьнебольшое значение (эпсилон), с которым вы бы сравнили абсолютное значение x, например,

if (Math.Abs(x) < 1E-10)
...