\section{Floats} \definition{} \textit{Binary decimals}\footnotemark{} are very similar to base-10 decimals. \par In base 10, we interpret place value as follows: \begin{itemize} \item $0.1 = 10^{-1}$ \item $0.03 = 3 \ \times 10^{-2}$ \item $0.0008 = 8 \times 10^{-4}$ \end{itemize} \footnotetext{this is a misnomer, but that's ok.} \vspace{5mm} We can do the same in base 2: \begin{itemize} \item $\texttt{0.1} = 2^{-1} = 0.5$ \item $\texttt{0.011} = 2^{-2} + 2^{-3} = 0.375$ \item $\texttt{101.01} = 5.125$ \end{itemize} \vspace{5mm} \problem{} Rewrite the following binary decimals in base 10: \par \note{You may leave your answer as a fraction} \begin{itemize} \item $\texttt{1011.101}$ \item $\texttt{110.1101}$ \end{itemize} \vfill \pagebreak \definition{} Another way we can interpret a bit string is as a \textit{signed floating-point decimal}, or a \texttt{float} for short. \par Floats represent a subset of the real numbers, and are interpreted as follows: \par \note{The following only applies to floats that consist of 32 bits. We won't encounter any others today.} \begin{center} \begin{tikzpicture} \node[anchor=south west] at (0, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (0.25, 0) {\texttt{\texttt{b}}}; \node[anchor=south west] at (0.50, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (0.75, 0) {\texttt{\texttt{\_}}}; \node[anchor=south west] at (1.00, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (1.25, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (1.50, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (1.75, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (2.00, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (2.25, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (2.50, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (2.75, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (3.00, 0) {\texttt{\texttt{\_}}}; \node[anchor=south west] at (3.25, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (3.50, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (3.75, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (4.00, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (4.25, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (4.50, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (4.75, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (5.00, 0) {\texttt{\texttt{\_}}}; \node[anchor=south west] at (5.25, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (5.50, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (5.75, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (6.00, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (6.25, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (6.50, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (6.75, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (7.00, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (7.25, 0) {\texttt{\texttt{\_}}}; \node[anchor=south west] at (7.50, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (7.75, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (8.00, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (8.25, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (8.50, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (8.75, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (9.00, 0) {\texttt{\texttt{0}}}; \node[anchor=south west] at (9.25, 0) {\texttt{\texttt{0}}}; \draw (0.50, 0) -- (0.95, 0) node [midway, below=1mm] {sign}; \draw (1.05, 0) -- (3.15, 0) node [midway, below=1mm] {exponent}; \draw (3.30, 0) -- (9.70, 0) node [midway, below=1mm] {fraction}; \end{tikzpicture} \end{center} \begin{itemize}[itemsep = 2mm] \item The first bit denotes the sign of the float's value. We'll label it $s$. \par If $s = \texttt{1}$, this float is negative; if $s = \texttt{0}$, it is positive. \item The next eight bits represent the \textit{exponent} of this float. \note{(we'll see what that means soon)}\par We'll call the value of this eight-bit binary integer $E$. \par Naturally, $0 \leq E \leq 255$ \note{(since $E$ consist of eight bits.)} \item The remaining 23 bits represent the \textit{fraction} of this float, which we'll call $F$. \par These 23 bits are interpreted as the fractional part of a binary decimal. \par For example, the bits \texttt{0b1010000\_00000000\_00000000} represents $0.5 + 0.125 = 0.625$. \end{itemize} \problem{} Consider \texttt{0b01000001\_10101000\_00000000\_00000000}. \par Find the $s$, $E$, and $F$ we get if we interpret this bit string as a \texttt{float}. \par \note[Note]{Leave $F$ as a sum of powers of two.} \begin{solution} $s = 0$ \par $E = 258$ \par $F = 2^{31}+2^{19} = 2,621,440$ \end{solution} \vfill \definition{} The final value of a float with sign $s$, exponent $E$, and fraction $F$ is \begin{equation*} (-1)^s ~\times~ 2^{E - 127} ~\times~ \left(1 + \frac{F}{2^{23}}\right) \end{equation*} Notice that this is very similar to decimal scientific notation, which is written as \begin{equation*} (-1)^s ~\times~ 10^{e} ~\times~ (f) \end{equation*} \problem{} Consider \texttt{0b01000001\_10101000\_00000000\_00000000}. \par This is the same bit string we used in \ref{floata}. \par \vspace{2mm} What value do we get if we interpret this bit string as a float? \par \hint{$21 \div 16 = 1.3125$} \begin{solution} This is 21: \begin{equation*} 2^{131} \times \biggl(1 + \frac{2^{21} + 2^{19}}{2^{23}}\biggr) ~=~ 2^{4} \times (1 + 0.25 + 0.0625) ~=~ 16 \times (1.3125) ~=~ 21 \end{equation*} \end{solution} \vfill \pagebreak \problem{} Encode $12.5$ as a float. \par \hint{$12.5 \div 8 = 1.5625$} \begin{solution} \begin{equation*} 12.5 ~=~ 8 \times 1.5625 ~=~ 2^{3} \times \biggl(1 + (0.5 + 0.0625)\biggr) ~=~ 2^{130} \times \biggl(1 + \frac{2^{22} + 2^{19}}{2^{23}}\biggr) \end{equation*} which is \texttt{0b01000001\_01001000\_00000000\_00000000}. \par \end{solution} \vfill \definition{} Say we have a bit string $x$. \par We'll let $x_f$ denote the value we get if we interpret $x$ as a float, \par and we'll let $x_i$ denote the value we get if we interpret $x$ an integer. \problem{} Let $x = \texttt{0b01000001\_01001000\_00000000\_00000000}$. \par What are $x_f$ and $x_i$? \note{As always, you may leave big numbers as powers of two.} \begin{solution} $x_f = 12.5$ \par \vspace{2mm} $x_i = 2^{30} + 2^{24} + 2^{22} + 2^{19} = 11,095,237,632$ \end{solution} \vfill \pagebreak