0

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

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吗?答案是否可能因编程语言而异?

4

1 回答 1

0

这当然取决于输入。但是在我看来,以比最终结果更高的精度获得中间结果是一个好主意,因为您的结果至少与使用相同精度的结果一样准确。

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

它是否取决于编程语言:它不应该,但我不会完全排除它。有必要进行测试以确定我认为(或阅读语言或编译器的文档)。一般来说,我认为,既然我们在谈论精度,那么该规则将始终适用:您的结果将至少与您没有使用更精确的中间体的情况一样精确。

于 2013-10-08T10:35:51.710 回答