# 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