2

入力を変更するライブラリがあります (入力に 1 つ以上の格納された変数を追加または乗算します)。これらの変数は float として格納されます。通常、入力も float ですが、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)常に期待どおりの結果をもたらしますか?

4

1 に答える 1

1

数値が整数になり、float 仮数部の桁数がなくなるまでは、float 操作は正確です。端をカットしているため、フロートのカウントのエラーが表示されます。そして、それが起こらない間、恐れることは何もありません。しかし、2のべき乗とは異なる何かによる最初の除算は、この楽園を壊します. または、結果が長くなりすぎる操作。

于 2014-01-13T08:47:12.317 に答える