I agree, we could be a little looser about what should be treated as an int here.

However, I'm not sure what you're getting at with testing for half-integer here -- the result will be run through `int`.  Are you suggesting that we convert to a Fraction if it's a half-integer float?  Not really necessary, since halfs can be represented perfectly as a float (and floats are faster).  Note that above, we convert Fractions to floats if they are half integers for speed reasons, so it wouldn't make sense to do the opposite here.