#!/usr/bin/perl # # reptax.perl: Assessing the effects of repeated taxation. # # Gordon Irlam - 2006. # # Eg: reptax.perl 22 1.9 1.8 2.5 if ($#ARGV != 3) { die "Usage: reptax.perl tax_rate yield real_yield_growth_rate inflation_rate"; } $tax_rate = $ARGV[0] / 100.0; $yield = $ARGV[1] / 100.0; $growth_rate = $ARGV[2] / 100.0; $inflation_rate = $ARGV[3] / 100.0; printf "Tax rate = %.1f%%\n", $tax_rate * 100.0; printf "Yield = %.1f%%\n", $yield * 100.0; printf "Real yield growth rate = %.1f%%\n", $growth_rate * 100.0; printf "Inflation rate = %.1f%%\n", $inflation_rate * 100.0; printf "\n"; print " yearly sale final year sale\n"; printf "\n"; print " real real real real\n"; print "year increase rate increase rate\n"; $repeat = 1.0; $single = 1.0; $s_basis = 1.0; $cpi = 1.0; for ($n = 1; $n <= 40; $n++) { $repeat = (1.0 + ($yield + $growth_rate + $inflation_rate) * (1.0 - $tax_rate)) * $repeat; $s_basis = $s_basis + $yield * (1.0 - $tax_rate) * $single; $single = (1.0 + $yield * (1.0 - $tax_rate) + $growth_rate + $inflation_rate) * $single; $cpi = (1.0 + $inflation_rate) * $cpi; $r_grown = $repeat / $cpi - 1.0; $s_grown = ($s_basis + (1.0 - $tax_rate) * ($single - $s_basis)) / $cpi - 1.0; $r_annual = (1.0 + $r_grown) ** (1.0 / $n) - 1.0; $s_annual = (1.0 + $s_grown) ** (1.0 / $n) - 1.0; if (($n <= 10) || (($n % 5) == 0)) { printf " %2d %5.1f%% %4.1f%% %5.1f%% %4.1f%%\n", $n, $r_grown * 100.0, $r_annual * 100.0, $s_grown * 100.0, $s_annual * 100.0; } }