This worsens the message for negative numbers a bit, but simplifies the code enough that this is still a win.