a527c39d319efd05b06846d3b48fae241c7b21f9
[ipdf/sam.git] / chapters / Background / Floats / Operations.tex
1
2 Real values which cannot be represented exactly in a floating point representation must be rounded to the nearest floating point value. The results of a floating point operation will in general be such values and thus there is a rounding error possible in any floating point operation\cite{HFP}. 
3
4 Referring to Figure \ref{floats.pdf} it can be seen that the largest possible rounding error is half the distance between successive floats; this means that rounding errors increase as the value to be represented increases. For the result of a particular operation, the maximum possible rounding error can be determined and is commonly expressed in ``units in the last place'' (ulp), with 1 ulp equivelant to half the distance between successive floats\cite{goldberg1991whatevery}.
5
6
7 \begin{comment}
8 Floating point operations can in principle be performed using integer operations, but specialised Floating Point Units (FPUs) are an almost universal component of modern processors\cite{kelley1997acmos}. The improvement of FPUs remains highly active in several areas including: efficiency\cite{seidel2001onthe}; accuracy of operations\cite{dieter2007lowcost}; and even the adaptation of algorithms originally used in software, such as Kahan's Fast2Sum algorithm\cite{kadric2013accurate}. 
9
10
11 {\bf Put this stuff in an Appendix?}
12 \subsection{Addition and Subtraction}
13
14 According to the IEEE-754 standard, if $e_1 < e_2$, then the preferred form of $f_1 + f_2$ is:
15 \begin{align}
16         m_1 \beta^{e_1} \pm m_2 \beta^{e_2} &= (m_1 \pm \beta^{e_2 - e_1} m_2) \beta^{e_1}
17 \end{align}
18
19 This is equivelant to shifting the fixed point in $m_2$ by $e_2 - e_1$ to the left, and then performing fixed point addition or subtraction. If the result of the addition/subtraction requires a carry/borrow, divide result by $\beta$ (ie: shift digits by $1$ the right) and increment/decrement exponent. Then normalise the result (subtract leading zeros in mantissa from the exponent). Lastly perform the rounding operation; if this would generate a carry/borrow, shift right and increment/decrement exponent again, repeat.
20
21
22 \subsection{Multiplication and Division}
23 \begin{align}
24         m_1 \beta^{e_1} \times m_2 \beta^{e_2} &= (m_1 \times m_2 ) \beta^{e_1 + e_2}
25 \end{align}
26
27 \begin{align}
28         m_1 \beta^{e_1} \div m_2 \beta^{e_2} &= (m_1 \div m_2 ) \beta^{e_1 - e_2}
29 \end{align}
30
31 Multiplication and Division are not inverses.
32
33 \end{comment}

UCC git Repository :: git.ucc.asn.au