- snip -
there will be a issue in 8 halvings time
- snip -
7.) 9765625
8.) 4882812.5
..
so something has to change to avoid rounding errors..
- snip -
in short
although the GUI will incorrectly pretend there are only 21mill bitcoins. the number of shareable units will carry on increasing
- snip -
Bitcoin doesn't actually divide by two. That's an easy way to describe it for non-programmers, but...
Bitcoins stores the block subsidy as an integer number of satoshis. At each adjustment time (210000 blocks) it performs a "bitwise right shift" on that integer. This has the effect of dropping the least significant bit and then moving all the other bits over one place in that direction.
So 1250000000 satoshis (12.5 BTC) in binary is:
1001010100000010111110010000000
If we chop off the right most digit (notice only 6 zeros to the right of the last one instead of seven) we get:
100101010000001011111001000000
Which as an integer has a base
10 value of 625000000 satoshis (6.25 BTC).
Now, if you hack off the last digit when it is a one, it has an effect identical to dividing by 2
AND ROUNDING DOWN TO THE NEAREST INTEGER.9765625 satoshis (0.09765625 BTC) in binary is:
When the code performs the bitwise right shift, the result is:
Which when represented as a base
10 integer is is 4882812 satoshis (or 0.04882812 BTC).
Notice there is no additional unit or measure needed, and that extra 5 digit you mentioned doesn't actually exist.
As such, the total amount of bitcoins that will be created will actually be less than 20999999.9769 (less than 2099999997690000 satoshis).