Am 04.09.21 um 14:48 schrieb Hope Rouselle:
Christian Gollwitzer <aurio...@gmx.de> writes:

Am 02.09.21 um 15:51 schrieb Hope Rouselle:
Just sharing a case of floating-point numbers.  Nothing needed to be
solved or to be figured out.  Just bringing up conversation.
(*) An introduction to me
I don't understand floating-point numbers from the inside out, but I
do
know how to work with base 2 and scientific notation.  So the idea of
expressing a number as
    mantissa * base^{power}
is not foreign to me. (If that helps you to perhaps instruct me on
what's going on here.)
(*) A presentation of the behavior

import sys
sys.version
'3.8.10 (tags/v3.8.10:3d8993a, May 3 2021, 11:48:03) [MSC v.1928 64
bit (AMD64)]'

ls = [7.23, 8.41, 6.15, 2.31, 7.73, 7.77]
sum(ls)
39.599999999999994

ls = [8.41, 6.15, 2.31, 7.73, 7.77, 7.23]
sum(ls)
39.60000000000001
All I did was to take the first number, 7.23, and move it to the
last
position in the list.  (So we have a violation of the commutativity of
addition.)

I believe it is not commutativity, but associativity, that is
violated.

Shall we take this seriously?  (I will disagree, but that doesn't mean I
am not grateful for your post.  Quite the contary.)  It in general
violates associativity too, but the example above couldn't be referring
to associativity because the second sum above could not be obtained from
associativity alone.  Commutativity is required, applied to five pairs
of numbers.  How can I go from

   7.23 + 8.41 + 6.15 + 2.31 + 7.73 + 7.77

to

   8.41 + 6.15 + 2.31 + 7.73 + 7.77 + 7.23?

Perhaps only through various application of commutativity, namely the
ones below. (I omit the parentheses for less typing.  I suppose that
does not create much trouble.  There is no use of associativity below,
except for the intented omission of parentheses.)

With the parens it will become more obvious.


      7.23 + 8.41 + 6.15 + 2.31 + 7.73 + 7.77
    = 8.41 + 7.23 + 6.15 + 2.31 + 7.73 + 7.77

The sum is evaluated as

        (((7.23 + 8.41) + 6.15 + ...)

For the first shift, you are correct that commutativity will result in

        (((8.41 + 7.23) + 6.15 + ...)

But you can't go in one step to

        (((8.41 + 6.15) + 7.23 + ...)

with the commutativity law alone. Instead, a sequence of associativity and commutativity is required to move the 7.23 out of the first pair of parentheses.

And what I was trying to say, the commutative steps *are* equal in floating point arithmetics, whereas the associative steps are not.

        Christian

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to