All pastes #624307 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-07-18 05:30 UTC
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;
}