Figuring out stuff like this often requires that you look at the numbers
in the radix representation in which the calculations
are done.
fpprec is a number which is converted to an (over) estimate of the
number of BINARY bits required in the fraction part of a bfloat.
thus fpprec:32 (decimal places) is really 109 bits. (try
this: fpprec:32; ?fpprec;)
the maxima variable $fpprec is what is set to 32. the lisp variable
fpprec is set to 109.
The rounding for bfloats is done according to the round-to-nearest rule
for IEEE floats. Maybe that is the answer you want.
This rounding probably doubles or even quadruples the time taken for the
basic arithmetic operation.
RJF
Sheldon Newhouse wrote:
Hello,
> I was looking at some of W. Kahan's papers on round-off errors and
> found the following test for estimation of the roundoff error in a computer.
>
> In some notes on his web page entitled
> "OLD Notes on Errors and Equation-Solving"
>
> he states the following
>
> If y fop z denotes the floating point representation of the mathematical
> operation y op z where
> op is one of +,-,*,/, then
>
> y fop z = (y op z)/(1-a)
>
> where
>
> abs(a) < abs( ( ((4.0/3.0 rounded) - 1.0)*3.0 - 1.0 )
>
> There is a difference between the stated estimate for standard double
> precision and the output using 'bfloat'.
> Kahan mentions that his estimate is an over-estimataion, so there is no
> contradiction.
>
> My question is whether the computed outcome with 'bfloat' is also a
> correct upper estimate for 'a'. Note: I did not check the mathematics
> involved. I thought someone (maybe RJF) would know the answer immediately.
>
> Here are some outputs (maxima 5.18.1 with cmucl).
>
> (%i5) fpprec;
> (%o5) 16
> (%i6) abs(((4.0/3.0) - 1.0)*3.0 -1.0);
> (%o6) 2.220446049250313e-16
>
> Here is the computation using 'bfloats'.
> (%i7) abs(((bfloat(4.0)/bfloat(3.0)) - bfloat(1.0))*bfloat(3.0)
> -bfloat(1.0));
> (%o7) 2.775557561562891b-17
>
> Is this smaller number an accurate estimate ?
>
> More generally, does the method produce valid estimations for any
> precision?
>
> In particular, are the following upper bounds valid?
>
> %i10) fpprec: 32;
> (%o10) 32
> (%i11) abs(((bfloat(4.0)/bfloat(3.0)) - bfloat(1.0))*bfloat(3.0)
> -bfloat(1.0));
> (%o11) 3.0814879110195773648895647081359b-33
> (%i12) fpprec: 64;
> (%o12) 64
> (%i13) abs(((bfloat(4.0)/bfloat(3.0)) - bfloat(1.0))*bfloat(3.0)
> -bfloat(1.0));
> (%o13) 3.798227098303919498989296907824782861688386333447977986511911996b-65
>
> TIA,
> -sen
>
> _______________________________________________
> Maxima mailing list
> Maxima at math.utexas.edu
> http://www.math.utexas.edu/mailman/listinfo/maxima
>