Quote notation

Quote notation is a representation of rational numbers for which the addition, subtraction, and multiplication algorithms are the same as for natural numbers, and division is easier than the usual division algorithm, and works in the same right-to-left direction as the other arithmetic algorithms. Arithmetic in quote notation produces exact answers, with no roundoff error. It was invented by Eric Hehner of the University of Toronto, and published in the SIAM Journal on Computation, v.8, n.2, May 1979, pp. 124–134. It is related to Kurt Hensel's p-adic numbers.

Contents

Representation

A rational number is represented as a sequence of digits with a quote mark and radix point. For example, 12'3.4 is in quote notation. The radix point may come before the quote mark, as in 12.3'4 , or at the same place, as in 12!3 .

The radix point (in base ten it is called a decimal point) has its usual function; moving it left divides by the base; moving it right multiplies by the base. When the radix point is at the right end, the multiplicative factor is 1, and the point can be omitted. Scientific notation may be used as an alternative to the radix point.

We can think of the quote mark as saying that the digits to its left are repeated indefinitely to the left. For example, we can think of 12'34 as the infinite sequence ...1212121234 . If the repeated sequence is 0s, it and the quote mark can be omitted.

The natural numbers look as usual: 0, 1, 2, ... , or, including quote and point, 0!, 0'1., 0'2., ... . The negative integers begin with the digit one less than the base. For example, in decimal, minus three is 9'7 . Numbers beginning with any other repeating sequence are not integers. For example, in decimal, 6'7 is the fraction one-third, and 7'6 is minus one and seven-ninths.

Let x and y be sequences of digits. Let z be a sequence of zeros of the same length as y. Let a be the largest digit (one less than the base). Let w be a sequence of as of the same length as x. Then the number represented by x'y is y-xz/w. For example, 12'345 = 345 − 12000/99 = 7385/33.

Arithmetic

Addition

In our usual sign-and-magnitude notation, to add the two integers 25 and −37, one first compares signs, and determines that the addition will be performed by subtracting the magnitudes. Then one compares the magnitudes to determine which will be subtracted from which, and to determine the sign of the result. In our usual fraction notation, to add 2/3 + 4/5 requires finding a common denominator, multiplying each numerator by the new factors in this common denominator, then adding the numerators, then dividing the numerator and denominator by any factors they have in common.

In quote notation, to add, just add. There are no sign or magnitude comparisons, and no common denominators. Addition is the same as for natural numbers. Here are some examples.

  9'7 minus three              9'4 minus six
+ 0'6 add plus six          +  9'2 add minus eight
—————                        —————
  0'3 makes plus three       9'8 6 makes minus fourteen
  6'7 one-third
+ 7'6 add minus one and seven-ninths
—————
  4'3 makes minus one and four-ninths

Subtraction

In our usual sign-and-magnitude notation, subtraction involves sign comparison and magnitude comparison, and may require adding or subtracting the magnitudes, just like addition. In our usual fraction notation, subtraction requires finding a common denominator, multiplying, subtracting, and reducing to lowest terms, just like addition.

In quote notation, to subtract, just subtract. There are no sign or magnitude comparisons, and no common denominators. When a minuend digit is less than the corresponding subtrahend digit, do not borrow from the minuend digit to its left; instead, carry (add one) to the subtrahend digit to its left. Here are some examples.

  9'7 minus three              9'4 minus six
- 0'6 subtract plus six     -  9'2 subtract minus eight
—————                        —————
  9'1 makes minus nine         0'2 makes plus two
  6'7 one-third
- 7'6 subtract minus one and seven-ninths
—————
8'9 1 makes plus two and one-ninth

Multiplication

Multiplication is the same as for natural numbers. To recognize the repetition in the answer, it helps to add the partial results pairwise. Here are some examples.

6'7 x 0'3 = 0'1 one-third times three makes one
6'7 x 7'6 one-third times minus one and seven-ninths:
multiply 6'7 by 6:        0'2 answer digit 2
multiply 6'7 by 7:      6'9
              add:     ————
                        6'9 answer digit 9
multiply 6'7 by 7:    6'9
              add:   ————
                      3'5 answer digit 5
multiply 6'7 by 7:  6'9
              add: ————
                    0'2 repetition of original
makes 592' minus sixteen twenty-sevenths

To someone who is unfamiliar with quote notation, 592' is unfamiliar, and translation to −16/27 is helpful. To someone who normally uses quote notation, −16/27 is a formula with a negation and a division operation; performing those operations yields the answer 592' .

Division

The commonly used division algorithm produces digits from left-to-right, which is opposite to addition, subtraction, and multiplication. This makes further arithmetic difficult. For example, how do we add 1.234234234234... + 5.67676767... ? Usually we use a finite number of digits and accept an approximate answer with roundoff error. The commonly used division algorithm also produces duplicate representations; for example, 0.499999... and 0.5 represent the same number. In decimal, there is a kind of guess for each digit, which is seen to be right or wrong as the calculation progresses.

In quote notation, division produces digits from right-to-left, the same as all other arithmetic algorithms; therefore further arithmetic is easy. Quote arithmetic is exact, with no error. Each rational number has a unique representation (if the repetition is expressed as simply as possible, and we have no meaningless 0s at the right end after a radix point). Each digit is determined by a "division table", which is the inverse of part of the multiplication table; there is no "guessing". Here is an example.

9'84 / 0'27 minus sixteen divided by twenty-seven
since 0'27 ends in 7 and 9'84 ends in 4, ask:
                          9'8 4 What times 7 ends in 4? It's 2
multiply 0'27 by 2:       0'5 4
          subtract:       —————
                          9'3   What times 7 ends in 3? It's 9.
multiply 0'27 by 9:   0'2 4 3
          subtract:   ———————
                      9'7 5   What times 7 ends in 5? It's 5.
multiply 0'27 by 5: 0'1 3 5
          subtract: ———————
                    9'8 4 repetition of original
makes 592' minus sixteen twenty-sevenths

Division works when the divisor and the base have no factors in common except 1. In the previous example, 27 has factors 1, 3, and 27. The base is 10, which has factors 1, 2, 5, and 10. So division worked. When there are factors in common, they must be removed. For example, to divide 4 by 15, first multiply both 4 and 15 by 2:

4/15 = 8/30

Any 0s at the end of the divisor just tell where the radix point goes in the result. So now divide 8 by 3.

                      0'8 What times 3 ends in 8? It's 6.
multiply 0'3 by 6:  0'1 8
         subtract:   ————
                      9' What times 3 ends in 9? It's 3.
multiply 0'3 by 3:  0'9
         subtract: ————
                    9' repetition of earlier difference
makes 3'6 two and two-thirds
Now move the decimal point one place left, to get
3!6 four-fifteenths

Removing common factors is annoying, and it is unnecessary if the base is a prime number. Computers use base 2, which is a prime number, so division always works. And the division tables are trivial. The only questions are: what times 1 ends in 0? and: what times 1 ends in 1. Thus the rightmost bits in the differences are the bits in the answer. For example, one divided by three, which is 1/11 , proceeds as follows.

             0'1 rightmost bit is 1
  subtract 0'1 1
           —————
             1'  rightmost bit is 1
subtract 0'1 1
         —————
         1'0   rightmost bit is 0
subtract   0'
         ————
         1'   repetition of earlier difference
makes 01'1 one-third

Sign determination

If the leading digit is less than the first digit after the quote, the number is positive. For example, 123'45 is positive because 1 is less than 4. If the leading digit is more than the first digit after the quote, the number is negative. For example, 54'3 is negative because 5 is more than 3 .

If the quote comes at the end, just append a zero after the radix point. For example, 592' = 592!0 , which is negative because 5 is more than 0. And 59.2' = 59.2'0 which is negative.

If the leading digit equals the first digit after the quote, then either the number is 0!0 = 0, or the representation can be shortened by rolling the repetition to the right. For example, 23'25 = 32'5 which is positive because 3 is less than 5.

In binary, if it starts with 1 it is negative, and if it starts with 0 it is nonnegative, assuming the repetition has been rolled to the right as far as possible.

Negation

To negate, complement each digit, and then add 1. For example, in decimal, to negate 12'345, complement and get 87'654, and then add 1 to get 87'655. In binary, flip the bits, then add 1 (same as 2's complement). For example, to negate 01'1, which is one-third, flip the bits to get 10'0, then add 1 to get 10'1, and roll right to shorten it to 01' which is minus one-third.

External links