Upadłem na dziwną sprawę. Próbowałem jednego z trzech rozwiązań opublikowanych tutaj z Pyson: Increment a python floating point value by the smallest possible amount. Wszystkie trzy rozwiązania wykazują dziwne zachowanie, gdy ląduję na tym zmiennoprzecinkowym: 1.15898324042702949299155079643242061138153076171875.numpy.nexta po zmniejszeniu zamiast inkrementacji
powiedzmy mam następujący kod:
import numpy as np
from __future__ import division
a = 1.15898324042702949299155079643242061138153076171875
b = 0
b = np.nextafter(a,1)
print a, b
z jakiegoś powodu, zamiast zwiększający b
o najmniejszej możliwej ilości, to jest zmniejszany. Dlaczego tak jest?
Oto kilka szybkich wyników, które dostałam od zabawy:
In [12]: a = 1.15898324042702949299155079643242061138153076171875
In [13]: a
Out[13]: 1.1589832404270295
In [14]: numpy.nextafter(a,1)
Out[14]: 1.1589832404270293
In [15]: numpy.nextafter(a,-1)
Out[15]: 1.1589832404270293