Fix regression and overflow bug for rationals.

When I fixed the previous issue with rational rounding, I had introduced a regression. There was also an overflow bug introduced for fixed-precision rationals. This patch corrects both bugs.
Any reason to prefer this logic over the non-redundant
```
if upper {
    if *self >= Zero::zero() {
        //...
    } else {
        //...
    }
} else {
    // ...
}
```
?