2

我有一个修改输入的库(将输入与一个或多个存储变量相加或相乘)。这些变量存储为浮点数。通常,输入也是一个浮点数,但在某些情况下它是一个整数。我担心这个的准确性。

float GetValue(float input)
{
    foreach (float modifier in various_data_sources)
    {
        if (isFactor)
            input = input * modifier;
        else
            input = input + modifier;
    }
    return input;
}

void MainLogic()
{
    int defaultValue = 3;
    // If the modifier is 2 (add), I expect the final modified int to be 5:
    DoSomeIntThing((int) GetValue(defaultValue));
}

我能做些什么来让这更安全吗?值的修改需要是动态的,将整数运算和浮点运算的修改分开会是一团糟。这是否像我认为的那样不安全,还是像这样的操作(int)(2.0f+(float)3)总是会产生预期的结果?

4

1 回答 1

1

在您的数字是整数并且没有浮点尾数可以拥有的更多数字之前,对它们的浮点运算是精确的。由于切割末端而出现计数浮点数的错误。虽然它没有发生,但也没什么好害怕的。但是第一次除以不同于 2 的幂的东西会打破这个天堂。或任何使结果过长的操作。

于 2014-01-13T08:47:12.317 回答