#define DECNUMDIGITS 38 // work with up to 38 digits
#include "decNumber.h" // base number library
#include <stdio.h> // for printf
#include <signal.h> // signal handling
#include <setjmp.h> // setjmp/longjmp
jmp_buf
preserve;
void
signalHandler(
int
);
void
signalHandler(
int
sig) {
signal
(SIGFPE, signalHandler);
longjmp
(preserve, sig);
}
int
main(
int
argc,
char
*argv[]) {
decNumber a, b;
decContext set;
char
string[DECNUMDIGITS+14];
int
value;
if
(argc<3) {
printf
(
"Please supply two numbers to add.\n"
);
return
1;
}
decContextDefault(&set, DEC_INIT_BASE);
signal
(SIGFPE, signalHandler);
value=
setjmp
(preserve);
if
(value) {
set.status &= DEC_Errors;
printf
(
"Signal trapped [%s].\n"
, decContextStatusToString(&set));
return
1;
}
set.digits=DECNUMDIGITS;
decNumberFromString(&a, argv[1], &set);
decNumberFromString(&b, argv[2], &set);
decNumberAdd(&a, &a, &b, &set);
decNumberToString(&a, string);
printf
(
"%s + %s => %s\n"
, argv[1], argv[2], string);
return
0;
}