fix a corner case where float(x) would not call x.__float__() for a float subtype