UTK - Math 171 - Alexiades
Floating Point Numbers - Roundoff
There are finitely many floating point numbers on any computer.
They are NOT evenly spaced (same # between consecutive powers of 2)
so spread out further and further apart.
Any given real number x must be approximated by a nearest
machine number, fl(x), resulting in a roundoff error.
1. There is an inherent error in representing real numbers,
2. Machine arithmetic is not necessarily commutative,
i.e. the order of operations may affect the result!
3. Loss of significant digits in arithmetic, especially in:
• subtractive cancellation:
when subtracting nearly equal reals
• unbalanced multiplication:
when nultiplying by a very small number
(or dividing by a very large number).
4. Number of decimal digits that can be trusted:
7 in single precision, 15 in double precision.
Machine epsilon ε
ε is the smallest positive number such that 1+ε > 1
ε = 2−p , p=precision = # of bits in mantissa.
In 32 bit double precision, p=52, so ε = 2−52 ≈ 10−15
For any real x, fl(x) = x ( 1 + ε ),
so ε = ( fl(x) − x ) / x
= relative error in representing x by fl(x)
Thus, the absolute error in representing x by fl(x)
is roundoff = fl(x)−x = εx ,
so it is proportional to x .
So, the larger the number the larger the roundoff error!
In Matlab: eps(x) gives the machine number nearest to x
for that computer.
eps(1) or just eps gives ε itself.
For example: eps(1) = 2.2204e-16 , eps(100) = 1.4211e-14 ,
eps(1000) = 1.1369e-13 , eps(1.e6) = 1.1642e-10 , ...
losing more and more accuracy...
For example: 1+eps == 1 gives false, 1+eps/2 == 1 gives true
So, any (positive) number less than ε is effectively zero