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