rendered paste body#include <stdio.h>
#include <err.h>
#include <math.h>
void usage()
{
errx(100,"usage: pmwfinance p r t");
}
int doit(double p,double r,int t,double amt)
{
while (t > 0) {
p -= amt;
p *= (1 + (r / 12));
--t;
}
if (p < 0) return -1;
if (p > 0) return 1;
return 0;
}
int main(int argc,char *argv[])
{
double p, r, lo, hi, mid;
int t, x;
if (!argv[1] || sscanf(argv[1],"%lf",&p) != 1) usage();
if (!argv[2] || sscanf(argv[2],"%lf",&r) != 1) usage();
if (!argv[3] || sscanf(argv[3],"%d",&t) != 1) usage();
lo = 0;
hi = p * pow(1 + r,t);
while ((hi - lo) > 0.0001) {
mid = (lo + hi) * 0.5;
x = doit(p,r,t,mid);
if (x == 0) break;
if (x < 0) hi = mid;
else lo = mid;
}
printf("%lf\n",lo);
return 0;
}