#### UMBC CMSC201, Computer Science I, Fall 1994
Sections 0101, 0102 and Honors

# Fractions in base 2

In base ten (decimal), we use 0.1 to represent 1/10, 0.01 to represent
1/100, 0.001 to represent 1/1000, and so on. In base two (binary),
we use 0.1 to represent 1/2, 0.01 to represent 1/4, and 0.001 to represent
1/8, etc.
We can determine the binary representation of a fraction using
the following strategy. Suppose the number is stored in the variable
`fraction`, then we can print out each digit of the number's
binary representation as follows:

while (fraction > 0) {
fraction = fraction * 2 ;
if (fraction >= 1.0) {
digit = 1 ;
fraction = fraction - 1.0 ;
} else {
digit = 0 ;
}
printf("%d\n", digit) ;
}

Using this strategy, we can figure out that the binary representation
of 5/8 = 0.625 (base 10) is 0.101 (base 2).
The value of the variables `fraction` and `digit`
during each iteration of the loop are (in base 10):

iteration fraction digit
1 0.625
1.25 1
0.25
2 0.25
0.5 0
3 0.5
1.0 1
0.0

We can check our answer by noting that 1/2 + 1/8 = 5/8, which is
what 0.101 (base 2) means.
If we try the same for 1/5, we will notice that the loop never ends.
So, 1/5 cannot be represented by a finite number of digits in base 2.
This is analogous to the fact that 1/3 is cannot be represented using
a finite number of digits in base 10.

iteration fraction digit
1 0.2
0.4 0
2 0.4
0.8 0
3 0.8
1.6 1
0.6
4 0.6
1.2 1
0.2
5 0.2
0.4 0
6 0.4
0.8 0
7 0.8
1.6 1
0.6
8 0.6
1.2 1
9 0.2
0.4 0
10 0.4
0.8 0
11 0.8
1.6 1
0.6
12 0.6
1.2 1
...

So, 1/5 is 0.0011001100110011... (base 2) repeating.

Last Modified:
Fri Sep 30 11:39:33 EDT 1994

Richard Chang, chang@gl.umbc.edu