我有一个修改输入的库(将输入与一个或多个存储的变量相加或相乘)。这些变量存储为浮点数。通常,输入也是一个浮点数,但在某些情况下它是一个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)
这样的操作是否会产生预期的结果?
答案 0 :(得分:1)
直到你的数字是整数并且没有浮动尾数可以有的更多数字,对它们的浮点运算是精确的。计数浮点数的错误是由于切割末端而出现的。虽然它没有发生,但没有什么可担心的。但是,与2的力量不同的第一次划分将打破这个天堂。或任何使结果太长的操作。