on floating-point numbers

Hope Rouselle hrouselle at jevedi.com
Wed Sep 8 09:20:27 EDT 2021


Joe Pfeiffer <pfeiffer at cs.nmsu.edu> writes:

> Hope Rouselle <hrouselle at jevedi.com> writes:
>> Christian Gollwitzer <auriocus at gmx.de> writes:
>>>
>>> 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.)
>>
>>      7.23 + 8.41 + 6.15 + 2.31 + 7.73 + 7.77
>>    = 8.41 + 7.23 + 6.15 + 2.31 + 7.73 + 7.77
>>    = 8.41 + 6.15 + 7.23 + 2.31 + 7.73 + 7.77
>>    = 8.41 + 6.15 + 2.31 + 7.23 + 7.73 + 7.77
>>    = 8.41 + 6.15 + 2.31 + 7.73 + 7.23 + 7.77
>>    = 8.41 + 6.15 + 2.31 + 7.73 + 7.77 + 7.23.
>
> But these transformations depend on both commutativity and
> associativity, precisely due to those omitted parentheses.  When you
> transform
>
>     7.23 + 8.41 + 6.15 + 2.31 + 7.73 + 7.77
>
> into
>
>     8.41 + 6.15 + 2.31 + 7.73 + 7.77 + 7.23.
>
> it isn't just assuming commutativity, it's also assuming associativity
> since it is changing 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.
>     
> If I use parentheses to modify the order of operations of the first line
> to match that of the last, I get
>     7.23 + (8.41 + 6.15 + 2.31 + 7.73 + 7.77)
>
> Now, I get 39.60000000000001 evaluating either of them.

I need to go slow.  If I have just two numbers, then I don't need to
talk about associativity: I can send 7.23 to the rightmost place with a
single application of commutativity.  In symbols,

  7.23 + 8.41 = 8.41 + 7.23.

But if I have three numbers and I want to send the leftmost to the
rightmost place, I need to apply associativity

    7.23 + 8.41 + 6.15
  = (7.23 + 8.41) + 6.15  -- clarifying that I go left to right
  = 7.23 + (8.41 + 6.15)  -- associativity
  = (8.41 + 6.15) + 7.23  -- commutativity

I see it.  Cool.  Thanks.


More information about the Python-list mailing list