2012-11-09 1 views
7

나는 이상한 경우에 빠졌습니다. 나는 여기 Pyson에서 게시 한 세 가지 해결책 중 하나를 시도했다 : Increment a python floating point value by the smallest possible amount. 이 세 가지 솔루션은 모두이 부동 소수점에 착륙 할 때 이상한 동작을 표시합니다 : 1.15898324042702949299155079643242061138153076171875. 대신에 가능한 가장 작은 양만큼 b를 증가, 그것은이 감소되고, 어떤 이유numpy.nextafter 증분 대신 감소합니다

import numpy as np 
from __future__ import division 

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

:

하자 나는 다음과 같은 코드를 말한다. 왜 그럴까요?

nextafter(x1, x2[, out]) 

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

두 번째 인수는 +/-에 의해 주어진 방향되지 않습니다 :

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

를 워드 프로세서에서 (강조 광산) :

는 여기에 내가 장난에서 가져온 몇 가지 빠른 결과입니다 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