Question on benign and catastrophic cancellations

675 Views Asked by At

I am studying theorem 4 in this article (its proof is under theorem 13). From what I have learned, the theorem is helpful when $x$ is small but $1 \oplus x \neq 1$. At the end of theorem 4, it discussed idea of benign cancellation as follow:

The results of this section can be summarized by saying that a guard digit guarantees accuracy when nearby precisely known quantities are subtracted (benign cancellation). Sometimes a formula that gives inaccurate results can be rewritten to have much higher numerical accuracy by using benign cancellation; however, the procedure only works if subtraction is performed using a guard digit. The price of a guard digit is not high, because it merely requires making the adder one bit wider. For a 54 bit double precision adder, the additional cost is less than 2%. For this price, you gain the ability to run many algorithms such as formula (6) for computing the area of a triangle and the expression $\ln(1 + x)$. Although most modern computers have a guard digit, there are a few (such as Cray systems) that do not.

From what I understood, the enhanced formula,$\frac{ln(x+1)}{(1+x)-1}$, helps replacing the catastrophic cancellation with benign cancellation. I assumed $\ln(1+x)$ causes catastrophic cancellation.

My Question: I cannot follow how the catastrophic cancellation was replaced with benign cancellation when we replaced $\frac{ln(x+1)}{x}$ with $\frac{ln(x+1)}{(1+x)-1}$.

Can anyone please help clarifying this?

Thanks.

1

There are 1 best solutions below

8
On BEST ANSWER

The idea is that you have a function that satisfies $f(1+x)=x\,g(x)$ with $g(0)=1\ne0$.

However, in computing $1⊕x$ you may lose precision in $x$ as $\bar x=(1⊕x)⊖1$ will be different by about $\mu=2^{-53}$ in double floating point. This means that the relative error between $x$ and $\bar x$ is $\mu/|x|$ can be arbitrarily high, and thus also the relative error between $f(1+x)$ and $f(1+\bar x)=f(1⊕x)$, seeing that $$ f(1⊕x) = \bar x\,g(\bar x) $$ will also exhibit this reduced precision. But one can easily repair most of the damage by dividing out $\bar x$ and multiplying with $x$ as the relative error between $x\,g(\bar x)$ and $x\,g(x)$ has the size $\mu g'(0)/g(0)$, that is, it is small independent of $x$ (for small $x$).

So finally, $\dfrac{x\,f(1+\bar x)}{\bar x}$ is implemented as

(x*f(1+x)) / ((1+x)-1)