1

pow(x,y)计算为e^(y*log(x)) 通常数学库log(x)以四精度计算(这很耗时),以避免在计算时精度损失,y*log(x)因为精度误差会在计算中放大e^(y*log(x))。现在,如果我想pow(x,y)在以下步骤中进行计算。

double pow(double x,double y) {
   return exp(y*log(x)); // Without any quad precision multiplication
}

此函数的最大 ULP 错误是多少。我知道 IEEE-754 标准规定任何浮点运算的 ULP 误差应小于 0.5,即0.5*2^(-52). 因此,如果我的操作y*log(x)出现 0.5 ULP 错误,我如何计算最大可能的 ULP 错误e^(y*log(x))


同意计算pow(x,y)相当复杂。算法通常log(x)以更高的精度计算,并且两者之间的乘法y并不log(x)简单。由于 ULP 误差取决于y*log(x),因此最大误差将针对 的最大值Y*log(x)不是e^(y*log(x))无穷大。正确的?对于这种情况,我如何计算 ULP 的数量?双精度格式的尾数的最大位数是多少,在最大值的情况下会与实际值不同y*log(x)


更新了问题。感谢所有的帮助!

那么 10 位差异会导致多少 ULP 错误?我计算为,

    ULP = (actual - computed)/ 2^(e-(p-1)) 

其中 e 是实际数字的指数,p=53 表示双精度。我读到我 ULP = 2^(e-(p-1)) 假设,

    Actual = 1.79282279439444787915898270592 *10^308
    Computed = 1.79282279439451553814547593293 * 10^308 
    error= actual - computed = 6.7659e+294 

现在

1 ULP = 2^(e- (p-1)) 
e = 1023 (exponent of the actual number - bias)
1 ULP = 2^(1023 - (53-1)) = 2^971
ULP error = error/ 1 ULP = 339

这个对吗?

4

2 回答 2

1

我现在没有时间给出更全面的答案,但这里有一些开始:

假设每个单独操作(<code>exp、*和)中的错误log最多为 ½ ULP。这意味着对于满足 -/2 ≤ e 0 ≤ /2的某些e 0,计算的值log(x)恰好是 log( x )•(1+ e 0 ) ,其中 ULP 为 1 (2 −52 IEEE-754 基本 64 位二进制格式)。对于一些 -/2 ≤ e 0 ≤ /2 和一些 -/2 ≤ e 1 ≤ /2 ,计算值正好是y •log( x )•(1+ e 0 )•(1+ e 1 ) 。的计算值恰好是yy*log(x)exp(y*log(x))•log( x )•(1+ e 0 )•(1+ e 1 ) •(1+ e 2 ) 对于某些-/2 ≤ e 0 , e 1 , e 2 ≤ /2。错误当然是 e y •log( x )•(1+ e 0 )•(1+ e 1 ) •(1+ e 2 ) − e y •log( x )

然后,您可以开始分析该表达式,以获得e 0e 1e 2的可能值的最大值和最小值。如果 0 < y且 1 < x,则最大误差发生在e 0 = e 1 = e 2 = /2 时。

请注意,exp和的常见实现log通常不会正确舍入。几个 ULP 的错误可能很常见。因此,除非例程被记录为正确舍入,否则不应假设 ½ ULP 界限。

于 2018-10-01T17:22:55.390 回答
0

最大浮点误差(对于exp(y*log(x))

x == 0

错误是无限的;

x < 0

OPpow()失败,但是当y没有分数部分时,它应该完成。

x > 0

z = y*log(x). 该计算中的错误可能是相当合理的——只有几个ULP或更少。让我们假设 1 ULP 或z_error = z*2 -53给定通常的double

但是考虑一下它的影响:exp(z + error_z) = exp(z)*exp(error_z).

z大约 710exp(709.78)大约是,所以让我们考虑DBL_MAX更大的值会导致 OP 的无穷大pow()

exp(some_small_value)大约是1 + some_small_valueexp(error_z)是那么1 + 710*pow(2,-53)。因此,最终pow()可能会损失大约log2(710)9、10 以及一些精度。

于 2018-10-01T23:00:12.820 回答