Do calculations in satoshis to avoid FP error

This commit is contained in:
Jonathan "Duke" Leto
2019-03-26 21:07:00 -07:00
parent b8166c757c
commit 4f71319b75

View File

@@ -4,23 +4,26 @@ use strict;
my $supply = 0.0;
my $block = 0;
my $amount = 12.5;
my $satoshis = 100_000_000;
my $amount = int(12.5*$satoshis);
my $halvings = 0;
while ($supply <= 21_000_000) {
#while ($halvings <= 64 && $amount >= 1e-8) {
# Use this to calculate when supply hits a certain value
#while ($supply <= 21_000_000*$satoshis) {
# Use this to calculat when block rewards end
while ($halvings <= 64 && $amount >= 1) {
$block++;
if ($block < 5) {
$amount = 40_000;
$amount = 40_000 * $satoshis;
} else {
# Halving every 840000 blocks
if ($block % 840_000 == 0) {
$amount /= 2;
$halvings++;
}
$amount = 12.5 / (2**$halvings);
$amount = int(12.5*$satoshis) / (2**$halvings);
}
$supply += $amount;
# block, current supply, block reward amount, number of halvings
print "$block,$supply,$amount,$halvings\n";
printf "%s,%s,%s,%s\n", $block,$supply / $satoshis, $amount / $satoshis, $halvings;
}