How does one convert a decimal float to binary using the multiply by 2 method?

  • #1
CGandC
326
34
I've started reading A concise introduction to numerical analysis, A.C. Foul and on the first page there's the following paragraph about how a floating point in fixed point precision can be represented:

We live in a continuous world with infinitely many real numbers. However, a computer has only a finite number of bits. This requires an approximate representation. In the past, several different representations of real numbers have been suggested, but now the most widely used by far is the floating point representation. Each floating point representations has a base ##\beta## (which is always assumed to be even) which is typically 2 (binary), 8 (octal), 10 (decimal), or 16 (hexadecimal), and a precision ##p## which is the number of digits (of base ##\beta## ) held in a floating point number. For example, if ##\beta=10## and ##p=5##, the number 0.1 is represented as ##1.0000 \times 10^{-1}##. On the other hand, if ##\beta=2## and ##p=20##, the decimal number 0.1 cannot be represented exactly but is approximately ##1.1001100110011001100 \times 2^{-4}##. We can write the representation as ##\pm d_0 . d_1 \cdots d_{p-1} \times \beta^e##, where ##d_0 . d_1 \cdots d_{p-1}## is called the significand (or mantissa) and has ##p## digits and ##e## is the exponent. If the leading digit ##d_0## is non-zero, the number is said to be normalized. More precisely ##\pm d_0 . d_1 \cdots d_{p-1} \times \beta^e## is the number
##
\pm\left(d_0+d_1 \beta^{-1}+d_2 \beta^{-2}+\cdots+d_{p-1} \beta^{-(p-1)}\right) \beta^\epsilon, 0 \leq d_i<\beta
##

I don't understand the example where it says " ##\beta=2## and ##p=20##, the decimal number 0.1 cannot be represented exactly but is approximately ##1.1001100110011001100 \times 2^{-4}## " . How did the author arrive to ##1.1001100110011001100 \times 2^{-4}##?

I've tried arriving to the result using a method ( I don't know how it's called, I've met in on the internet so I have no idea about its correctness ) in which one keeps multiplying the number after the decimal point by 2 and if it goes past 1.0 then we add 1 to the output, else we add 0 to the output. Also, using a decimal float to binary converter on the web such as on the site https://www.exploringbinary.com/floating-point-converter/ , doesn't give me the author's result.
 
  • Like
Likes pbuk
Computer science news on Phys.org
  • #2
Well if I take the binary float of the mantissa above and convert it to decimal, I get 1.5999999, which when divide by 16 give 0.1 to 6 digits. So the answer in the book is correct. One way to look at it is that in floating point you want the binary mantissa to be 1.something. So what power of 2 do you need to multiply 0.1 by to give a binary mantissa that is 1.something?
0.4 = 0.0110011...
0.8 = 0.110011...
1.6 = 1.100110011...
3.2 = 11.00110011...

So this fixes the binary exponent as -4. Then you convert 1.6 to binary and you get the result above.
 
  • Like
Likes CGandC
  • #3
Also, on the conversion site you linked, if you convert the decimal 0.1 to Normalized binary scientific notation, you get the result in the book.
 
  • #4
Understood, thanks!. I missed the result at the site, sorry, my bad.
 
  • #5
Note that the binary expansion of 0.1 can be obtained as [tex]\begin{split}
\frac{1}{10} &= \frac{3}{30} \\
&= \frac12 \cdot \frac{3}{15} \\
&= \frac12 \cdot \frac{3}{16} \cdot \frac{16}{15} \\
&= \frac{3}{32} \left(1 + \frac{1}{16} + \frac{1}{16^2} + \dots \right) \\
&= 2^{-5} \times (11.0011001100110011\dots)_2 \\
&= (1.100110011001100\dots)_2 \times 2^{-4}. \end{split}[/tex] The basis of the technique is to ensure that the denominator is either [itex]2^n[/itex], in which case the expansion terminates, or else has a factor of [itex]2^n - 1[/itex] in which case the expansion eventually repeats, using [tex]
\frac{1}{2^n - 1} = 2^{-n} \frac{1}{1 - 2^{-n}} = 2^{-n}(1 + 2^{-n} + 2^{-2n} + \dots).[/tex]
 
  • Like
Likes phyzguy and CGandC

1. How does the "multiply by 2 method" convert decimal float to binary?

The multiply by 2 method involves repeatedly multiplying the decimal number by 2 and noting the whole number part of the result until the decimal part becomes 0. The binary equivalent is obtained by arranging these whole numbers in reverse order.

2. Is the "multiply by 2 method" the only way to convert decimal float to binary?

No, there are other methods such as the divide by 2 method and the double dabble method which also convert decimal float to binary. However, the multiply by 2 method is the most commonly used method.

3. Can the "multiply by 2 method" be used for negative decimal numbers?

Yes, the multiply by 2 method can be used for both positive and negative decimal numbers. For negative numbers, the process is the same but with the addition of a negative sign in front of the binary equivalent.

4. What is the time complexity of the "multiply by 2 method" for converting decimal float to binary?

The time complexity of the multiply by 2 method is O(log n), where n is the decimal number being converted. This means that the time taken to convert a decimal number to binary using this method increases logarithmically with the size of the decimal number.

5. Are there any limitations to the "multiply by 2 method" for converting decimal float to binary?

Yes, the multiply by 2 method is limited by the size of the decimal number being converted. If the decimal number is too large, it may result in an overflow or loss of precision during the multiplication process.

Similar threads

  • Computing and Technology
Replies
4
Views
771
  • Engineering and Comp Sci Homework Help
Replies
2
Views
2K
  • Calculus and Beyond Homework Help
Replies
1
Views
3K
Replies
3
Views
1K
  • Programming and Computer Science
Replies
2
Views
2K
  • Engineering and Comp Sci Homework Help
Replies
1
Views
1K
  • Calculus and Beyond Homework Help
Replies
6
Views
4K
  • Engineering and Comp Sci Homework Help
Replies
10
Views
5K
Replies
6
Views
9K
  • Set Theory, Logic, Probability, Statistics
Replies
11
Views
1K
Back
Top