Hi Andrew,

I have no clue what future versions of Python will do, but on my setup
there is no optimization done on this (I have taken arrays as float32, just
to show the differences better):

In [19]: N = 10
In [20]: x0 = numpy.random.uniform(size=(N, )).astype(numpy.float32)
In [21]: h = numpy.random.uniform(size=(N, )).astype(numpy.float32)
In [22]: dx = (x0 + h) - x0
In [23]: h
Out[23]:
array([0.55208284, 0.3112231 , 0.93941885, 0.25871968, 0.3018999 ,
       0.29337496, 0.05489019, 0.01224913, 0.3677995 , 0.05231242],
      dtype=float32)
In [24]: dx
Out[24]:
array([0.5520829 , 0.3112231 , 0.9394188 , 0.25871968, 0.30189988,
       0.29337496, 0.05489022, 0.01224911, 0.3677995 , 0.0523124 ],
      dtype=float32)
In [24]: dx - h
Out[25]:
array([ 5.9604645e-08,  0.0000000e+00, -5.9604645e-08,  0.0000000e+00,
       -2.9802322e-08,  0.0000000e+00,  2.2351742e-08, -1.3038516e-08,
        0.0000000e+00, -1.1175871e-08], dtype=float32)

But it also happens with float64 types, with much smaller differences of
course (in the order of 1e-16). My (limited) understanding of the way
Python works is that parenthesis will always be resolved first, the rest
after.

Assuming I understood your question correctly, of course :-) .

Andrea.


On Fri, 20 Dec 2024 at 03:46, Andrew Nelson via NumPy-Discussion <
numpy-discussion@python.org> wrote:

> Hi all,
> Let's assume we have two float arrays, `x0` and `h`, both of which have
> the same shape. Let's calculate the sum of those two arrays:
>
> ```
> x1 = x0 + h
> ```
>
> The true representable difference between `x1` and `x0` is:
>
> ```
> dx = x1 - x0
> ```
>
> Is it also possible to get that exact representation by doing the
> following:
>
> ```
> dx = (x0 + h) - x0
> ```
>
> Or is there a risk that the Python interpreter would prematurely optimize
> that to give:
>
> ```
> dx = h
> ```
>
>
> --
> _____________________________________
> Dr. Andrew Nelson
>
>
> _____________________________________
> _______________________________________________
> NumPy-Discussion mailing list -- numpy-discussion@python.org
> To unsubscribe send an email to numpy-discussion-le...@python.org
> https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
> Member address: andrea.gav...@gmail.com
>
_______________________________________________
NumPy-Discussion mailing list -- numpy-discussion@python.org
To unsubscribe send an email to numpy-discussion-le...@python.org
https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
Member address: arch...@mail-archive.com

Reply via email to