Currency Module User’s Guide : Chapter 8 Errors and Error‑Handling : Error-Handling
Error-Handling
The most common errors associated with the RWDecimal<T> classes are inexact errors and overflow errors. The Currency Module library provides a mechanism that lets you customize how these errors are handled.
Installing an Inexact Error Handler
Inexact errors occur when a number can’t be represented exactly with the available number of digits, but can be approximated by reducing the number of digits after the decimal. When addition, subtraction, or multiplication result in an inexact error, an RWDecimalInexactErr<T> object is created and passed to an error handler.
By default, an inexact error results in an error message being printed and execution resuming. You can substitute a different action by supplying your own handler. Here is an example:
 
void myInexactHandler(const RWDecimalInexactErr<RWMP2Int>& errobj)
{cerr << “The error message was ‘” << errobj.msg();
cerr << endl;
cerr << “The operands were “ << errobj.leftOperand();
cerr << “ and “ << errobj.rightOperand() << endl;
cerr << “Ignoring loss of precision and continuing”;
cerr << endl;
}
 
yourFunction()
{RWDecimal<RWMP2Int>::setInexactHandler(myInexactHandler);
.
.
.
}
Installing an Overflow Error Handler
An overflow error occurs when a number cannot be represented with the available number of digits. For example 10^30 cannot be represented in the RWDecimal<RWMP3Int> class as it has too many digits. When an operation results in an overflow error, an RWDecimalOverflowErr<T> object is created and passed to an error handler.
The default overflow handler will print an error message and throw the error object as an exception.
 
void myOverflowHandler(const RWDecimalOverflowErr<RWMP2Int>& x)
{. . Error handling code . .
}
 
yourFunction()
{RWDecimal<RWMP2Int>::setOverflowHandler(myOverflowHandler)
.
.
.