General Decimal Arithmetic
[ FAQ  Decimal web links  Bibliography  Arithmetic specification  Formats (encodings)  decNumber C implementation  DFPAL  Testcases  Summary  Web links  Densely Packed Decimal  Speleotrove  Contact ] 
Welcome to the General Decimal Arithmetic website, which is now hosted at speleotrove.com. The page and file names here have not been changed from the names used on the previous website, www2.hursley.ibm.com. 
The problems of binary floatingpoint can be avoided by using base 10 (decimal) exponents and preserving those exponents where possible. This site describes a decimal arithmetic which achieves the necessary results and is suitable for both hardware and software implementation. It brings together the relevant concepts from a number of ANSI, IEEE, ECMA, and ISO standards, and conforms to the decimal formats and arithmetic in the IEEE 754 standard (‘7542008’) published by the IEEE in August 2008, and the ISO/IEC/IEEE 60559:2011 standard, published by ISO in July 2011. IEEE 7542008 is currently undergoing a minor revision.
The decimalencoded formats and arithmetic described in the new standard now have many implementations in hardware and software (see links below), including:
The combination of formats and arithmetic defined here and in the IEEE 754 and ISO/IEC/IEEE 60559:2011 standards describe a new decimal data type, in various sizes. Notably, this single data type can be used for integer, fixedpoint, and floatingpoint decimal arithmetic, and the design permits compatible fixedsize and arbitraryprecision implementations. Further, most existing numeric data in commercial databases are stored in a decimal form (one or two digits per byte), which can be converted to and from the decimalencoded formats efficiently and easily.
The main features of the arithmetic are summarized below. For the background and rationale for the design of the arithmetic, see Decimal FloatingPoint: Algorism for Computers in the Proceedings of the 16th IEEE Symposium on Computer Arithmetic (Cowlishaw, M. F., 2003).
Parts of these decimal arithmetic pages are reproduced with permission from IBM © Copyright 1997, 2008 by International Business Machines Corporation. Copyright © Mike Cowlishaw 1981, 2015.
Here you will find documentation and downloads for decimal arithmetic, fixedsize decimal formats (encodings) and their performance, the decNumber reference implementation, the DFPAL PowerPC abstraction layer, and the languageindependent testcases.
Arithmetic  Version  Description 
Specification
[.html  .pdf] 
1.70 2009.03.25 
Decimal floatingpoint arithmetic, with unrounded and integer arithmetic as a subset (IEEE 754 + IEEE 854 + ANSI X3.274 + ECMA 334 + Java^{[TM]} 5). 
This specification forms the basis for a number of implementations, and also describes the decimal arithmetic in the new IEEE 754 standard. 
Formats  Version  Description 
Specification
[.html  .pdf] 
1.01 2009.03.20 
Concrete decimal formats (bit encodings) suitable for hardware or software implementation of native decimal datatypes; these provide up to 7, 16, or 34 digits of precision. 
Performance
[.html  .pdf] 
1.12 2009.03.21 
Performance measurements on three implementations that support the IEEE 754 decimal formats. 
Sample code
[.html] 
1.00 2003.04.10 
Java^{[TM]} classes which illustrate the decimal encoding of decimal floatingpoint numbers, and the corresponding decoding. 
(The earlier ‘Strawman 1’ proposal, implemented as decSingle and decDouble in early versions of the decNumber package, is available for historical interest in PDF form. See also: A Decimal FloatingPoint Specification, Schwarz et al., 15th IEEE Symposium on Computer Arithmetic [presentation charts].) 
The package is available under two free open source licenses (the ICU license is the simpler and the less restrictive), and is suitable for littleendian or bigendian systems which support 32bit (or wider) integers. It is currently in use on dozens of different platforms, including mainframes, PowerPC, ARMbased microcontrollers and tablets, x86, and over 20 varieties of Unix.
decNumber  Version  Description 
Documentation
[.html  .pdf] 
3.68 2010.01.23 
Describes the decNumber package, including a User’s Guide
section with several examples.
(Note that the documentation here may be a more recent version than some versions of downloadable code. If such is the case, check the changes list in the Appendix to determine if this document applies.) 
Errata  Known bugs and fixes since 3.56, 2007.10.12.  
International Components for Unicode (ICU)
decNumber package 
3.68 2010.02.10 
The source code (.h and .c
files), together with the examples, the
ICU license, and the documentation in PDF format.
(The latest package is also mirrored here.) 
GPL open source
decNumber C code decExamples.zip 
3.53 2007.09.07 
‘decNumber C code’ links to the open source code (.h and .c files), part of the GCC project (GPL license). ‘decExamples.zip’ contains the example files referred to in the documentation and also the readme.txt file which has suggestions on how to compile and run the examples. 
More implementations of the arithmetic are listed below. 
In addition to arithmetic operations and various utilities, DFPAL also provides conversions between decimal floating point formats and many other programming language intrinsic data types such as binary floating point and integers.
DFPAL  Version  Description 
Documentation
[.html  as .zip] 
2.20 2008.01.03 
The DFPAL User’s guide with overview, examples, compilation instructions, FAQ, etc. 
Download
DFPAL.zip DFPAL.tar.gz 
2.20 2008.01.03 
The DFPAL source code (.h and .c files), together with the examples, the International Components for Unicode (ICU) license, the documentation in HTML format, etc. 
Testcases  Version  Description 
Documentation
[.html  .pdf] 
2.44 2009.03.24 
Describes the testcase file format, testcase coverage, and testcase sources. 
Download
dectest.zip dectest0.zip 
2.62 2010.04.19 
The extended (dectest.zip) and subset (dectest0.zip) testcase files (containing more than 81,300 tests). These cover all the operations and conversions described in the specifications, and include tests for the decimal encodings. 
See also the IBM Haifa test suite (FPGen), and Hossam Fahmy’s Arithmetic operations debugging and verification page. 
The decimal arithmetic described here combines the requirements of both fixedpoint and floatingpoint arithmetic, giving the following advantages:


The links below provide background and related information.
Background & Rationale

Bibliography
Related Decimal Links

Please send any comments or corrections to Mike Cowlishaw (mfc), mfc@speleotrove.com; see also speleotrove.com. 
Parts of these decimal arithmetic pages are reproduced with permission
from IBM © Copyright 1997, 2008 by International Business Machines
Corporation.
Copyright © Mike Cowlishaw 1981, 2015.
Java is a trademark of Sun Microsystems Inc. and Oracle. 