#define DECNUMDIGITS 38 // work with up to 38 digits
#include "decNumber.h" // base number library
#include <stdio.h> // for printf
int
main(
int
argc,
char
*argv[]) {
int
need=3;
if
(argc<need+1) {
printf
(
"Please supply %d number(s).\n"
, need);
return
1;
}
{
decNumber one, mtwo, hundred;
decNumber start, rate, years;
decNumber total;
decContext set;
char
string[DECNUMDIGITS+14];
decContextDefault(&set, DEC_INIT_BASE);
set.traps=0;
set.digits=25;
decNumberFromString(&one,
"1"
, &set);
decNumberFromString(&mtwo,
"-2"
, &set);
decNumberFromString(&hundred,
"100"
, &set);
decNumberFromString(&start, argv[1], &set);
decNumberFromString(&rate, argv[2], &set);
decNumberFromString(&years, argv[3], &set);
if
(set.status & DEC_Errors) {
printf
(
"An input argument word was invalid [%s]\n"
,
decContextStatusToString(&set));
return
1;
}
decNumberDivide(&rate, &rate, &hundred, &set);
decNumberAdd(&rate, &rate, &one, &set);
decNumberPower(&rate, &rate, &years, &set);
decNumberMultiply(&total, &rate, &start, &set);
decNumberRescale(&total, &total, &mtwo, &set);
if
(set.status & DEC_Errors) {
set.status &= DEC_Errors;
printf
(
"Result could not be calculated [%s]\n"
,
decContextStatusToString(&set));
return
1;
}
decNumberToString(&total, string);
printf
(
"%s at %s%% for %s years => %s\n"
,
argv[1], argv[2], argv[3], string);
}
return
0;
}