Skip to content

Instantly share code, notes, and snippets.

@mlbright
Last active December 16, 2015 20:39
Show Gist options
  • Save mlbright/5493671 to your computer and use it in GitHub Desktop.
Save mlbright/5493671 to your computer and use it in GitHub Desktop.
compare 2 mortgage options
#!/usr/bin/env perl
use 5.010;
use strict;
use warnings;
my $n = 21 * 12; # remaining amortization in number of months
my $ingblended = 3.84;
my $ingbroken = 3.08;
my $tdrate = 2.79;
my $outside_penalty = 15215.42;
my $inside_penalty = 11012.97;
my $INGblended = 402403.98 - 2558.83;
my $INGbroken = $INGblended + $inside_penalty;
my $TDP = $INGblended + $outside_penalty;
sub rate {
my $rate = shift;
return $rate / 100.0 / 12.0;
}
sub payment {
# http://en.wikipedia.org/wiki/Mortgage_loan#Capital_and_interest
my ( $P, $r, $n ) = @_;
$r = rate($r);
my $e = ( 1 + $r )**$n;
return ( $P * $r * $e ) / ( $e - 1 );
}
sub monthly_payment {
# http://en.wikipedia.org/wiki/Fixed_rate_mortgage
my ( $P, $r, $n ) = @_;
$r = rate($r);
my $e = 1.0 / ( ( 1 + $r )**$n );
return $r * $P / ( 1 - $e );
}
say sprintf "ING payment (blended): %.2f",
payment( $INGblended, $ingblended, $n );
say sprintf "ING payment (broken) : %.2f",
payment( $INGbroken, $ingbroken, $n );
say sprintf "TD payment : %.2f", payment( $TDP, $tdrate, $n );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment