Wonky block reward rounding?

Something that’s tickled me as odd is the rounding of the block reward to a hundredth of a coin. What’s more odd is how the rounding is almost always down even when typical rounding rules would round up as closest to nearest cent, except for some strange occurrences where the reward is rounded up when it should have been down.

For example, block 1 had a difficulty of 7, meaning the unrounded reward would be 20.38775510. However, the actual reward given was simply 20.38. Compare to block 47797, where the unrounded reward would be 12.81390872 but the actual reward was 12.82.

So why the rounding, and why is the rounding code so capricious?

The rounding itself is on line 232 in prime.cpp in the [tt]TargetGetMint[/tt] function. It looks simple and standard, so perhaps the wayward direction of rounding is a sign of a bug somewhere in the [tt]CBigNum[/tt] class with regard to multiplication and division. Still, that doesn’t explain why rewards are being rounded to the nearest cent, which is the real crux of the issue here.

Mint amount is always floored to the cent. Block 47797 has a user transaction so there is 1 cent transaction fee collected.

1 cent is the minimum transaction amount in primecoin.

Why is it always floored, though? That it always has been is no explanation.