我想知道以下内容:我有一个方法,它接受一个浮点作为输入,并在一些计算后返回一个浮点数。计算可能涉及加法,除法,对数,幂等等。这样做时,中间结果需要存储多次。像这样疯狂的东西:
float performSomeComputations(float value)
{
// addition, substraction, logarithms, multiplication, etcetera
float a = value * 12.0;
float b = math.pow(a, 34.0);
float c = math.log10(b + value - 567);
return a + b + c;
}
我的问题是:您如何存储中间结果是否重要?即作为float
还是double
?我们假设中间值不超过最小值和/或最大值,那么显然会有差异。但是如果使用double
类型,返回值是否更准确,或者在最终返回float
之后,您是否会得到完全相同的答案?答案是否可能因编程语言而异?
答案 0 :(得分:0)
当然,这取决于输入。但是我认为中间结果的精度高于最终结果,这是一个好主意,因为你的结果至少与使用相同的精度一样准确。
如果计算和数字使得中间结果的精度稍微高一些,那么最终结果可能是相同的。但情况并非总是如此;在某些情况下,特别是如果有复杂的计算需要很多步骤,最终的结果会更精确,因为每一步的精度损失都会更少。
它是否依赖于编程语言:它不应该,但我不会完全排除它。测试是必要的,以确定我(或阅读语言或编译器的文档)。一般来说,我认为,因为我们正在谈论精确度,所以规则总是适用:您的结果至少与您没有使用更精确的中间体的情况一样精确。< / p>