Division by 2 every 200000 blocks is just as easy as division by 1.000003466 every block.
No, it isn't.
You forget that Bitcoins are only divisible down to 8 decimal places. When the reward gets small enough, dividing it by 1.000003466 is equivalent to dividing by 1.00000. In other words, the reward would stop getting smaller and the eventual number of Bitcoins generated would no longer be limited to 21 million(ish).
On the other hand, on any binary computer, division by 2 is identical to performing a right bit-shift. For example, the bit pattern for 50 Bitcoins is represented in binary as:
0000 0000 0000 0000 0001 0011 1000 1000 0000 0000 0000 0000 0000 0000 0000 0000The bit pattern for 25 Bitcoins is represented as
0000 0000 0000 0000 0000 1001 1100 0100 0000 0000 0000 0000 0000 0000 0000 0000Note that the only difference is that there is one less zero on the right and one more zero on the left. Thus, the bits have been moved, or shifted, over by one place.
A right bit-shift always guarantees that the output is smaller than the input. Because of this, when the reward is 1 satoshi:
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001and it is time to lower it further, the code will perform a right bit-shift on that value, which will result in a reward of zero:
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000Thus, no more Bitcoins will ever be generated. This is no mistake. Satoshi knew what he was doing.