2017-02-03 63 views
0

如何确定两个浮点数之间的差值是否至多为1 ULP?测试1个ULP中的两个浮点数ULP

类似下面的代码,(忽略标志和指数和)提取尾数的二进制,但略低于可怕:

a = int(<float>.hex().lstrip('-').lstrip('0x')[1:].lstrip('.')[:-3].rstrip('+').rstrip('p'), 16) 
b = int(<float>.hex().lstrip('-').lstrip('0x')[1:].lstrip('.')[:-3].rstrip('+').rstrip('p'), 16) 
print abs(a - b) <= 1 

回答

1

随着NumPy的,你可以得到下一个浮点数达到指定次数后:

# Test whether taking the smallest possible step from b in the direction of a gets you a. 
# Special case: If b == a, then np.nextafter(b, a) == a 
a == np.nextafter(b, a) 

(这可能不太你想要什么如果说,这两个数字有不同的ULPS,或者如果一个是无穷大)

+0

它为什么会成为一个问题,如果“这两个n成员有不同的ULP“?并非常感谢你的答案,但我宁愿只使用Python stdlib,而不是NumPy ... –

+0

@EcirHana:如果a和b在一个对方的ULP内,但不是一个b-ULP彼此,应该发生什么?这个检查给出了False。也许你不想那样。 – user2357112

+0

我明白了。在这种情况下,我的问题是错误的,你的回答是正确的:)。 –