Maths error

Hendrik van Rooyen mail at microcorp.co.za
Sun Jan 14 05:08:52 EST 2007


 "Tim Peters" <tim.one at comcast.net> wrote:


> [Nick Maclaren]
> >> ...
> >> Yes, but that wasn't their point.  It was that in (say) iterative
> >> algorithms, the error builds up by a factor of the base at every
> >> step. If it wasn't for the fact that errors build up, almost all
> >> programs could ignore numerical analysis and still get reliable
> >> answers! 
> >>
> >> Actually, my (limited) investigations indicated that such an error
> >> build-up was extremely rare - I could achieve it only in VERY
> >> artificial programs.  But I did find that the errors built up faster
> >> for higher bases, so that a reasonable rule of thumb is that 28
> >> digits with a decimal base was comparable to (say) 80 bits with a
> >> binary base. 
> 
> [Hendrik van Rooyen]
> > I would have thought that this sort of thing was a natural consequence 
> > of rounding errors - if I round (or worse truncate) a binary, I can be 
> > off by at most one, with an expectation of a half of a least 
> > significant digit, while if I use hex digits, my expectation is around
> > eight, and for decimal around five... 
> 
> Which, in all cases, is a half ULP at worst (when rounding -- as 
> everyone does now).
> 
> > So it would seem natural that errors would propagate 
> > faster on big base systems, AOTBE, but this may be 
> > a naive view.. 
> 
> I don't know of any current support for this view.  It the bad old days, 
> such things were often confused by architectures that mixed non-binary 
> bases with "creative" rounding rules (like truncation indeed), and it 
> could be hard to know where to "pin the blame".
> 
> What you will still see stated is variations on Kahan's telegraphic 
> "binary is better than any other radix for error analysis (but not very 
> much)", listed as one of two techincal advantages for binary fp in:
> 
>     http://www.cs.berkeley.edu/~wkahan/MktgMath.pdf
> 
> It's important to note that he says "error analysis", not "error 
> propagation" -- regardless of base in use, rounding is good to <= 1/2 
> ULP.  A fuller elementary explanation of this can be found in David 
> Goldberg's widely available "What Every Computer Scientist Should Know 
> About Floating-Point", in its "Relative Error and Ulps" section.  The 
> short course is that rigorous forward error analysis of fp algorithms is 
> usually framed in terms of relative error:  given a computed 
> approximation x' to the mathematically exact result x, what's the 
> largest possible absolute value of the mathematical
> 
>    r = (x'-x)/x
> 
> (the relative error of x')?  This framework gets used because it's more-
> or-less tractable, starting by assuming inputs are exact (or not, in 
> which case you start by bounding the inputs' relative errors), then 
> successively computing relative errors for each step of the algorithm.  
> Goldberg's paper, and Knuth volume 2, contain many introductory examples 
> of rigorous analysis using this approach.
> 
> Analysis of relative error generally goes along independent of FP base.  
> It's at the end, when you want to transform a statement about relative 
> error into a statement about error as measured by ULPs (units in the 
> last place), where the base comes in strongly.  As Goldberg explains, 
> the larger the fp base the sloppier the relative-error-converted-to-ULPs 
> bound is -- but this is by a constant factor independent of the 
> algorithm being analyzed, hence Kahan's "... better ... but not very 
> much".  In more words from Goldberg:
> 
>     Since epsilon [a measure of relative error] can overestimate the
>     effect of rounding to the nearest floating-point number by the
>     wobble factor of B [the FP base, like 2 for binary or 10 for
>     decimal], error estimates of formulas will be tighter on machines
>     with a small B.
> 
>     When only the order of magnitude of rounding error is of interest,
>     ulps and epsilon may be used interchangeably, since they differ by
>     at most a factor of B.
> 
> So that factor of B is irrelevant to most apps most of the time.  For a 
> combination of an fp algorithm + set of inputs near the edge of giving 
> gibberish results, of course it can be important.  Someone using 
> Python's decimal implementation has an often very effective workaround 
> then, short of writing a more robust fp algorithm:  just boost the 
> precision.
> 

Thanks Tim, for taking the trouble. - really nice explanation.

My basic error of thinking ( ? - more like gut feel ) was that the
bigger bases somehow lose "more bits" at every round, 
forgetting that half a microvolt is still half a microvolt, whether
it is rounded in binary, decimal, or hex...

- Hendrik




More information about the Python-list mailing list