2012-11-09 20 views
7

Garip bir duruma düştüm. Pyson'dan gönderilen üç çözümden birini denedim: Increment a python floating point value by the smallest possible amount. Bu üç kayan noktaya indiğimde üç çözümün tümü garip bir davranış sergiliyor: 1.15898324042702949299155079643242061138153076171875. yerine mümkün olan en küçük miktarda b artan nedeniyle, azaltılır, Nedensenumpy.nextafteri azaltma yerine

import numpy as np 
from __future__ import division 

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

:

Let Aşağıdaki kod var derler. Neden?

nextafter(x1, x2[, out]) 

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

İkinci argüman +/- tarafından verilen bir yönü değildir:

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 

cevap

9

Dokümanlar (vurgu benim):

İşte uğraşırken aldığım bazı hızlı sonuçlar var 1, amaçlayan değerdir.

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