当输入和输出是浮点数时,在双精度中获得中间结果是否有用?

时间:2013-10-08 10:31:59

标签: precision floating-point-precision double-precision

我想知道以下内容:我有一个方法,它接受一个浮点作为输入,并在一些计算后返回一个浮点数。计算可能涉及加法,除法,对数,幂等等。这样做时,中间结果需要存储多次。像这样疯狂的东西:

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之后,您是否会得到完全相同的答案?答案是否可能因编程语言而异?

1 个答案:

答案 0 :(得分:0)

当然,这取决于输入。但是我认为中间结果的精度高于最终结果,这是一个好主意,因为你的结果至少与使用相同的精度一样准确

如果计算和数字使得中间结果的精度稍微高一些,那么最终结果可能是相同的。但情况并非总是如此;在某些情况下,特别是如果有复杂的计算需要很多步骤,最终的结果会更精确,因为每一步的精度损失都会更少。

它是否依赖于编程语言:它不应该,但我不会完全排除它。测试是必要的,以确定我(或阅读语言或编译器的文档)。一般来说,我认为,因为我们正在谈论精确度,所以规则总是适用:您的结果至少与您没有使用更精确的中间体的情况一样精确。< / p>