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

@@ -2,25 +2,28 @@
use warnings; use warnings;
use strict; use strict;
my $supply = 0.0; my $supply = 0.0;
my $block = 0; my $block = 0;
my $amount = 12.5; my $satoshis = 100_000_000;
my $amount = int(12.5*$satoshis);
my $halvings = 0; my $halvings = 0;
while ($supply <= 21_000_000) { # Use this to calculate when supply hits a certain value
#while ($halvings <= 64 && $amount >= 1e-8) { #while ($supply <= 21_000_000*$satoshis) {
# Use this to calculat when block rewards end
while ($halvings <= 64 && $amount >= 1) {
$block++; $block++;
if ($block < 5) { if ($block < 5) {
$amount = 40_000; $amount = 40_000 * $satoshis;
} else { } else {
# Halving every 840000 blocks # Halving every 840000 blocks
if ($block % 840_000 == 0) { if ($block % 840_000 == 0) {
$amount /= 2; $amount /= 2;
$halvings++; $halvings++;
} }
$amount = 12.5 / (2**$halvings); $amount = int(12.5*$satoshis) / (2**$halvings);
} }
$supply += $amount; $supply += $amount;
# block, current supply, block reward amount, number of halvings # 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;
} }