浮点数学(整数)是否准确?

时间:2013-12-03 06:24:16

标签: c# floating-accuracy floating-point-conversion

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

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)这样的操作是否会产生预期的结果?

1 个答案:

答案 0 :(得分:1)

直到你的数字是整数并且没有浮动尾数可以有的更多数字,对它们的浮点运算是精确的。计数浮点数的错误是由于切割末端而出现的。虽然它没有发生,但没有什么可担心的。但是,与2的力量不同的第一次划分将打破这个天堂。或任何使结果太长的操作。