如何确定两个浮点数之间的差异是否最多为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
答案 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,或者如果一个是无穷大,那么这可能不是你想要的。)