DFP
Decimal Floating Point
Java class library

Introduction
 What is dfp?
Dfp is a radix 10000 floating point math library. It features compiletime
defineable precision, usual arithmetic functions (add, subtract, multiply,
divide, etc.), and a set of mathematical functions including: natural
logarithm and exponential, trigonometic functions and their inverses.
Dfp also has IEEE854 defined abilities such as userspecified rounding
modes, userdefineable trap handlers, and status flaqs.
 Design Goals
The following design goals were used to guide development of dfp.
 Accurate representation of decimal numbers.
 Accurate, well defined results
 Ability to work with high precision. Ability to set precision
at compile time.
 Portability.
 Ease of use
 Performance
 Major Design Decisions
 Radix of 10000 was chosen because it offer exact representation of
decimal numbers and better performance than a smaller radix would.
 Dfp is written in Java, this makes it somewhat portable to
start. To enhance portabilty more, it uses a minimal subset
of the language and core library APIs. This will ensure
portabity across Java implementations, and to other programming
languages.
 Dfp complies with IEEE854 with a few minor
exceptions. If strict
compliance is desired, the subclass
rossi.dfp.dfpdec
fixes most of these these minor inconsitancies at the cost of
some performance.
 Comparison with double and Big Decimal
 Dfp mantains all the features of double along with other
IEEE specified features. Like BigDecimal, it can accurately
represent decimal numbers.
 Feature comparison:
Feature  double  BigDecimal  dfp 
Precision  Fixed  Variable  Compile time selectable 
Floating/Fixed point  Floating  Fixed  Floating 
Accurately represent decimal numberfs  no  yes  yes 
IEEE Rounding modes  no  yes  yes 
IEEE Flags  no  no  yes 
IEEE Traps  no  no  yes 
Square Root  yes  no  yes 
Trig Functions  yes  no  yes 
Exp and Log  yes  no  yes 
 Ease of use and performance
While it cannot compete with the ease of use and performance of
double , dfp beats BigDecimal
in both these areas.
It offers familiar methods such as add(), subtact(), multiply(),
and divide(). Each of these functions take only a single argument
which is the other dfp to be operated on. For example to divide
the dfp named dfpA by the dfp named dfpB ,
the following code snippet will do the job:
dfp result = dfpA.divide(dfpB);
There is no need to specify rounding modes or a scalar as with
BigDecimal . This simplifies usage considerably.
