http://www.perlmonks.org?node_id=585622


in reply to adding numbers and floating point errors

Computers don't handle fractional floating point values very well. Anything other than powers of 1/2 (or their multiples) results in a form that repeats endlessly. This results in truncation or rounding errors, and these will tend to accumulate when you iterate.

You might want to consider keeping your data in rational form (e.g., bigrat) while you are performing your calculations. Doing this can save you lots of problems with rounding or truncation errors. Once you've finished your calculations you can convert your rationals into floating point format, if you wish, for display.

Replies are listed 'Best First'.
Re^2: adding numbers and floating point errors
by ikegami (Patriarch) on Nov 22, 2006 at 22:32 UTC

    Anything other than powers of 1/2 (or their multiples) results in a form that repeats endlessly.

    Not quite. Anything other than sums of powers of 2 result in a form that repeats endlessly.

    Sums of powers of 2 do not repeat endlessly. For example, 0.3125 is not a power of 2, yet it does not repeat because it is a sum of powers of 2 (2-2 + 2-4).

    Note that "powers of 1/2" and "powers of 2" are synonymous.

    Update: Nevermind. What you said and what I said are mathematically equivalent. 0.3125 is a multiple of a power of 2 (5 * 2-4).