测试1个ULP内的两个浮点数

时间:2017-02-03 17:40:44

标签: python floating-point

如何确定两个浮点数之间的差异是否最多为1 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 个答案:

答案 0 :(得分: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)

(如果两个数字有不同的ULP,或者如果一个是无穷大,那么这可能不是你想要的。)