[an error occurred while processing this directive]

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 (float or double) 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.

[an error occurred while processing this directive]

Saturday, 15-Feb-1997 14:13:34 EST