public static class ArithmeticEngine.ConservativeEngine
An arithmetic engine that conservatively widens the operation arguments
to extent that they can hold the result of the operation. Widening
conversions occur in following situations:
byte and short are always widened to int (alike to Java language).
To preserve magnitude: when operands are of different types, the
result type is the type of the wider operand.
to avoid overflows: if add, subtract, or multiply would overflow on
integer types, the result is widened from int to long, or from long to
to preserve fractional part: if a division of integer types would
have a fractional part, int and long are converted to double, and
BigInteger is converted to BigDecimal. An operation on a float and a
long results in a double. An operation on a float or double and a
BigInteger results in a BigDecimal.
Should be able to parse all FTL numerical literals, Java Double toString results, and XML Schema numbers.
This means these should be parsed successfully, except if the arithmetical engine
couldn't support the resulting value anyway (such as NaN, infinite, even non-integers):
-123.45, 1.5e3, 1.5E3, 0005, +0, -0, NaN,
INF, -INF, Infinity, -Infinity.