Keith said:
So what happened to the ranges of the operands?
In your model, each of x and y represents a range of real values.
For concreteness, let's say the ranges are 0.99 .. 1.01 (that's
obviously oversimplified, but it should suffice to make the point).
Then the possible range of the result of the multiplication should
be 0.9801 .. 1.0201, shouldn't it? This is just over twice the
range of the operands.
But you say that z represents the same range as x and y. Why?
Because that 'range' describes the range of real values that may
have been stored in the fp-object. We know the fp-multiplication
used the fp-exact values, so the result was 1.0. The range says
that is a possible value to have been originally stored in z.
If we eliminate consideration of the programming that set x and y
(the x = 1.0; y = 1.0
now we still know that the multiplication
used the exact fp-values of x and y, but we don't know exactly what
that represented. Now the 'range' of the result is unchanged - it
depends only on the stored value. But the possible error has to
consider the possible errors in the input to the multiplication,
i.e. the 'range' of those input values. The 'range' is not an
error measure - it is a limit to the precision of storage.