Guard digit

In numerical analysis, one or more guard digits can be used to reduce the amount of roundoff error.

Example
Suppose that the final result of a long, multi-step calculation can be safely rounded off to N decimal places. That is to say, the roundoff error introduced by this final roundoff makes a negligible contribution to the overall uncertainty.

However, it is quite likely that it is not safe to round off the intermediate steps in the calculation to the same number of digits. Be aware that roundoff errors can accumulate. If M decimal places are used in the intermediate calculation, we say there are M−N guard digits.

In computing
Guard digits are also used in floating point operations in most computer systems.

As an example, consider the subtraction $$2^1 \times 0.100_2 - 2^0 \times 0.111_2$$. Here, the product notation indicates a binary floating point representation with the exponent of the representation given as a power of two and with the significand given with three bits after the binary point. To compute the subtraction it is necessary to change the forms of these numbers so that they have the same exponent, and so that when the product notation is expanded the resulting numbers have their binary points lined up with each other. Shifting the second operand into position, as $$2^1 \times 0.0111_2$$, gives it a fourth digit after the binary point. This creates the need to add an extra digit to the first operand—a guard digit—putting the subtraction into the form $$2^1 \times 0.1000_2 - 2^1 \times 0.0111_2$$.

Performing this operation gives as the result $$2^1 \times 0.0001_2$$ or $$2^{-2} \times 0.100_2$$.

Without using a guard digit the subtraction would be performed only to three bits of precision, as $$2^1 \times 0.100_2 - 2^1 \times 0.011_2$$, yielding $$2^1 \times 0.001_2=$$ or $$2^{-1} \times 0.100_2$$, twice as large as the correct result. Thus, in this example, the use of a guard digit led to a more accurate result.

An example of the error caused by floating point roundoff is illustrated in the following C code.

It appears that the program should not terminate. Yet the output is: i=54, a=1.000000

Another example is:

Take two numbers:

$$2.56\times 10^0$$ and $$2.34\times 10^2$$

We bring the first number to the same power of $$10$$ as the second one:

$$0.0256\times 10^2$$

The addition of the two numbers is:

0.0256*10^2 2.3400*10^2 + ____________ 2.3656*10^2

After padding the second number (i.e., $$2.34\times 10^2 $$) with two $$0$$s, the bit after $$4$$ is the guard digit, and the bit after is the round digit. The result after rounding is $$2.37$$ as opposed to $$2.36$$, without the extra bits (guard and round bits), i.e., by considering only $$0.02+2.34 = 2.36$$. The error therefore is $$0.01$$.