#include #include #include 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; }