2012-11-09 25 views
7

बढ़ने के बजाय घटने के बाद मैं एक अजीब मामले पर गिर गया। मैंने यहां Pyson से पोस्ट किए गए तीन समाधानों में से किसी एक को आजमाया: Increment a python floating point value by the smallest possible amount। जब मैं इस फ़्लोटिंग पॉइंट पर उतरता हूं तो सभी तीन समाधान एक अजीब व्यवहार प्रदर्शित करते हैं: 1.15898324042702949299155079643242061138153076171875।numpy.nextafter

Let कहते हैं कि मैं निम्नलिखित कोड है:

import numpy as np 
from __future__ import division 

a = 1.15898324042702949299155079643242061138153076171875 
b = 0 
b = np.nextafter(a,1) 
print a, b 

किसी कारण से, बजाय छोटी संभव राशि से b बढ़ाने की है, यह कम कर रहा है। वह क्यों है? डॉक्स से (जोर मेरा)

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 

उत्तर

9

:

यहाँ कुछ त्वरित परिणाम है कि मैं चारों ओर खेलने से मिल गया है

nextafter(x1, x2[, out]) 

Return the next representable floating-point value after x1 **in the direction 
of x2 element-wise**. 

दूसरा तर्क एक दिशा +/- द्वारा दिए गए नहीं है 1, यह लक्ष्य करने के लिए मूल्य है।

In [12]: a = 1.15898324042702949299155079643242061138153076171875 

In [13]: a 
Out[13]: 1.1589832404270295 

In [14]: numpy.nextafter(a, 0) 
Out[14]: 1.1589832404270293 

In [15]: numpy.nextafter(a, 1) 
Out[15]: 1.1589832404270293 

In [16]: numpy.nextafter(a, 1.16) 
Out[16]: 1.1589832404270297 

In [17]: numpy.nextafter(a, 2) 
Out[17]: 1.1589832404270297