The question on my mind was: does this give the correct distance even around the boundary of an exponent bump?
And yes: mantissa and exponent are arranged in such a way that adding 1 to the binary form always yields the next float:
>>> import struct
>>> to_float = lambda i: unpack(">f", i.to_bytes(4))[0]
>>> to_float(0x3FFFFFFF)
1.9999998807907104
>>> to_float(0x40000000)
2.0
>>> to_float(0x40000001)
2.000000238418579