Method of complements
In mathematics and computing, the method of complements is a technique to encode a symmetric range of positive and negative integers in a way that they can use the same algorithm for addition throughout the whole range. For a given number of places half of the possible representations of numbers encode the positive numbers, the other half represents their respective additive inverses. The pairs of mutually additive inverse numbers are called complements. Thus subtraction of any number is implemented by adding its complement. Changing the sign of any number is encoded by generating its complement, which can be done by a very simple and efficient algorithm. This method was commonly used in mechanical calculators and is still used in modern computers. The generalized concept of the radix complement is also valuable in number theory, such as in Midy's theorem.
The nines' complement of a number given in decimal representation is formed by replacing each digit with nine minus that digit. To subtract a decimal number y from another number x two methods may be used:
In the first method the nines' complement of x is added to y. Then the nines' complement of the result obtained is formed to produce the desired result.
In the second method the nines' complement of y is added to x and one is added to the sum. The leading digit '1' of the result is then discarded. Discarding the initial '1' is especially convenient on calculators or computers that use a fixed number of digits: there is nowhere for it to go so it is simply lost during the calculation. The nines' complement plus one is known as the ten's complement.
The method of complements can be extended to other number bases ; in particular, it is used on most digital computers to perform subtraction, represent negative numbers in base 2 or binary arithmetic and test underflow and overflow in calculation.
Numeric complements
The radix complement of an n digit number y in radix b is, by definition,. The radix complement is most easily obtained by adding 1 to the diminished radix complement, which is. Since is the digit repeated n times, the diminished radix complement of a number is found by complementing each digit with respect to .The subtraction of y from x may be performed as follows.
Adding the diminished radix complement of x to y results in the value or which is the diminished radix complement of. The diminished radix complement of this is the value. Alternatively, adding the radix complement of y to x results in the value or. Assuming y ≤ x, the result will always be greater or equal to and dropping the initial '1' is the same as subtracting, making the result or just, the desired result.
In the decimal numbering system, the radix complement is called the ten's complement and the diminished radix complement the nines' complement. In binary, the radix complement is called the two's complement and the diminished radix complement the ones' complement. The naming of complements in other bases is similar. Some people, notably Donald Knuth, recommend using the placement of the apostrophe to distinguish between the radix complement and the diminished radix complement. In this usage, the four's complement refers to the radix complement of a number in base four while fours' complement is the diminished radix complement of a number in base 5. However, the distinction is not important when the radix is apparent, and the subtle difference in apostrophe placement is not common practice. Most writers use one's and nine's complement, and many style manuals leave out the apostrophe, recommending ones and nines complement.
Decimal example
The nines' complement of a decimal digit is the number that must be added to it to produce 9; the complement of 3 is 6, the complement of 7 is 2, and so on, see table. To form the nines' complement of a larger number, each digit is replaced by its nines' complement.Consider the following subtraction problem:
873
- 218
First method
We compute the nines' complement of the minuend, 873. Add that to the subtrahend 218, then calculate the nines' complement of the result.126
+ 218
344
Now calculate the nines' complement of the result
344
655
Second method
We compute the nines' complement of 218, which is 781. Because 218 is three digits long, this is the same as subtracting 218 from 999.Next, the sum of x and the nines' complement of y is taken:
873
+ 781
1654
The leading "1" digit is then dropped, giving 654.
1654
-1000
654
This is not yet correct. We have essentially added 999 to the equation in the first step. Then we removed 1000 when we dropped the leading 1 in the result 1654 above. This will thus make the answer we get one less than the correct answer. To fix this, we must add 1 to our answer:
654
+ 1
655
Adding a 1 gives 655, the correct answer to our original subtraction problem.
Magnitude of numbers
In the following example the result of the subtraction has fewer digits than x:123410
- 123401
Using the first method the sum of the nines' complement of x and y is
876589
+ 123401
999990
The nines' complement of 999990 is 000009. Removing the leading zeros gives 9 the desired result.
If the subtrahend, y, has fewer digits than the minuend, x, leading zeros must be added in the second method. These zeros become leading nines when the complement is taken. For example:
48032
- 391
can be rewritten
48032
- 00391
Replacing 00391 with its nines' complement and adding 1 produces the sum:
48032
+ 99608
+ 1
147641
Dropping the leading "1" gives the correct answer: 47641.
Binary method
The method of complements is especially useful in binary since the ones' complement is very easily obtained by inverting each bit. Adding 1 to get the two's complement can be done by simulating a carry into the least significant bit. For example:0110 0100
- 0001 0110
becomes the sum:
0110 0100
+ 1110 1001
+ 1
10100 1110
Dropping the initial "1" gives the answer: 0100 1110
Negative number representations
The method of complements normally assumes that the operands are positive and that y ≤ x, logical constraints given that adding and subtracting arbitrary integers is normally done by comparing signs, adding the two or subtracting the smaller from the larger, and giving the result the correct sign.Let's see what happens if x < y. In that case, there will not be a "1" digit to cross out after the addition since will be less than. For example, :
185
- 329
Complementing y and adding gives:
185
+ 670
+ 1
856
At this point, the there is no simple way to complete the calculation by subtracting ; one cannot simply ignore a leading 1. The expected answer is -144, which isn't as far off as it seems; 856 happens to be the ten's complement of 144. This issue can be addressed in a number of ways:
- Ignore the issue. This is reasonable if a person is operating a calculating device that doesn't support negative numbers since comparing the two operands before the calculation so they can be entered in the proper order, and verifying that the result is reasonable, is easy for humans to do.
- Use the same method to subtract 856 from 1000, and then add a negative sign to the result.
- Represent negative numbers as radix complements of their positive counterparts. Numbers less than are considered positive; the rest are considered negative. This works best for even radices since the sign can be determined by looking at the first digit. For example, numbers in ten's complement notation are positive if the first digit is 0, 1, 2, 3, or 4, and negative if 5, 6, 7, 8, or 9. And it works very well in binary since the first bit can be considered a sign bit: the number is positive if the sign bit is 0 and negative if it is 1. Indeed, two's complement is used in most modern computers to represent signed numbers.
- Complement the result if there is no carry out of the most significant digit. This is easier to implement with digital circuits than comparing and swapping the operands. But since taking the radix complement requires adding 1, it is difficult to do directly. Fortunately, a trick can be used to get around this addition: Instead of always setting a carry into the least significant digit when subtracting, the carry out of the most significant digit is used as the carry input into the least significant digit. So if y ≤ x, the carry from the most significant digit that would normally be ignored is added, producing the correct result. And if not, the 1 is not added and the result is one less than the radix complement of the answer, or the diminished radix complement, which does not require an addition to obtain. This method is used by computers that use sign-and-magnitude to represent signed numbers.....
Practical uses
- Pascal's calculator had two sets of result digits, a black set displaying the normal result and a red set displaying the nines' complement of this. A horizontal slat was used to cover up one of these sets, exposing the other. To subtract, the red digits were exposed and set to 0. Then the nines' complement of the minuend was entered. On some machine this could be done by dialing in the minuend using inner wheels of complements. In displaying that data in the complement window, the operator could see the nines' complement of the nines' complement of the minuend, that is the minuend. The slat was then moved to expose the black digits and the subtrahend was added by dialing it in. Finally, the operator had to move the slat again to read the correct answer.
- The Comptometer had nines' complement digits printed in smaller type along with the normal digits on each key. To subtract, the operator was expected to mentally subtract 1 from the subtrahend and enter the result using the smaller digits. Since subtracting 1 before complementing is equivalent to adding 1 afterwards, the operator would thus effectively add the ten's complement of the subtrahend. The operator also needed to hold down the "subtraction cutoff tab" corresponding to the leftmost digit of the answer. This tab prevented the carry from being propagated past it, the Comptometer's method of dropping the initial 1 from the result.
- The Curta calculator used the method of complements for subtraction, and managed to hide this from the user. Numbers were entered using digit input slides along the side of the device. The number on each slide was added to a result counter by a gearing mechanism which engaged cams on a rotating "echelon drum". The drum was turned by use of a crank on the top of the instrument. The number of cams encountered by each digit as the crank turned was determined by the value of that digit. For example, if a slide is set to its "6" position, a row of 6 cams would be encountered around the drum corresponding to that position. For subtraction, the drum was shifted slightly before it was turned, which moved a different row of cams into position. This alternate row contained the nines' complement of the digits. Thus, the row of 6 cams that had been in position for addition now had a row with 3 cams. The shifted drum also engaged one extra cam which added 1 to the result. The always present ten's complement "overflow 1" which carried out beyond the most significant digit of the results register was, in effect, discarded.
In computers
- If two's complement representation is used, subtraction requires only inverting the bits of the subtrahend and setting a carry into the rightmost bit.
- Using ones' complement representation requires inverting the bits of the subtrahend and connecting the carry out of the most significant bit to the carry in of the least significant bit.
- Using sign-magnitude representation requires only complementing the sign bit of the subtrahend and adding, but the addition/subtraction logic needs to compare the sign bits, complement one of the inputs if they are different, implement an end-around carry, and complement the result if there was no carry from the most significant bit.
Manual uses
Complementing the sum is handy for cashiers making change for a purchase from currency in a single denomination of 1 raised to an integer power of the currency's base. For decimal currencies that would be 10, 100, 1,000, etc., e.g. a $10.00 bill.