source: src/main/java/agents/org/apache/commons/math/dfp/package.html

Last change on this file was 1, checked in by Wouter Pasman, 7 years ago

Initial import : Genius 9.0.0

File size: 3.9 KB
Line 
1<html>
2<!--
3 Licensed to the Apache Software Foundation (ASF) under one or more
4 contributor license agreements. See the NOTICE file distributed with
5 this work for additional information regarding copyright ownership.
6 The ASF licenses this file to You under the Apache License, Version 2.0
7 (the "License"); you may not use this file except in compliance with
8 the License. You may obtain a copy of the License at
9
10 http://www.apache.org/licenses/LICENSE-2.0
11
12 Unless required by applicable law or agreed to in writing, software
13 distributed under the License is distributed on an "AS IS" BASIS,
14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 See the License for the specific language governing permissions and
16 limitations under the License.
17 -->
18 <!-- $Revision: 992696 $ $Date: 2010-09-05 00:57:31 +0200 (dim. 05 sept. 2010) $ -->
19 <body>
20Decimal floating point library for Java
21
22<p>Another floating point class. This one is built using radix 10000
23which is 10<sup>4</sup>, so its almost decimal.</p>
24
25<p>The design goals here are:
26<ol>
27 <li>Decimal math, or close to it</li>
28 <li>Settable precision (but no mix between numbers using different settings)</li>
29 <li>Portability. Code should be keep as portable as possible.</li>
30 <li>Performance</li>
31 <li>Accuracy - Results should always be +/- 1 ULP for basic
32 algebraic operation</li>
33 <li>Comply with IEEE 854-1987 as much as possible.
34 (See IEEE 854-1987 notes below)</li>
35</ol></p>
36
37<p>Trade offs:
38<ol>
39 <li>Memory foot print. I'm using more memory than necessary to
40 represent numbers to get better performance.</li>
41 <li>Digits are bigger, so rounding is a greater loss. So, if you
42 really need 12 decimal digits, better use 4 base 10000 digits
43 there can be one partially filled.</li>
44</ol></p>
45
46<p>Numbers are represented in the following form:
47<pre>
48n = sign &times; mant &times; (radix)<sup>exp</sup>;</p>
49</pre>
50where sign is &plusmn;1, mantissa represents a fractional number between
51zero and one. mant[0] is the least significant digit.
52exp is in the range of -32767 to 32768</p>
53
54<p>IEEE 854-1987 Notes and differences</p>
55
56<p>IEEE 854 requires the radix to be either 2 or 10. The radix here is
5710000, so that requirement is not met, but it is possible that a
58subclassed can be made to make it behave as a radix 10
59number. It is my opinion that if it looks and behaves as a radix
6010 number then it is one and that requirement would be met.</p>
61
62<p>The radix of 10000 was chosen because it should be faster to operate
63on 4 decimal digits at once instead of one at a time. Radix 10 behavior
64can be realized by add an additional rounding step to ensure that
65the number of decimal digits represented is constant.</p>
66
67<p>The IEEE standard specifically leaves out internal data encoding,
68so it is reasonable to conclude that such a subclass of this radix
6910000 system is merely an encoding of a radix 10 system.</p>
70
71<p>IEEE 854 also specifies the existence of "sub-normal" numbers. This
72class does not contain any such entities. The most significant radix
7310000 digit is always non-zero. Instead, we support "gradual underflow"
74by raising the underflow flag for numbers less with exponent less than
75expMin, but don't flush to zero until the exponent reaches MIN_EXP-digits.
76Thus the smallest number we can represent would be:
771E(-(MIN_EXP-digits-1)*4), eg, for digits=5, MIN_EXP=-32767, that would
78be 1e-131092.</p>
79
80<p>IEEE 854 defines that the implied radix point lies just to the right
81of the most significant digit and to the left of the remaining digits.
82This implementation puts the implied radix point to the left of all
83digits including the most significant one. The most significant digit
84here is the one just to the right of the radix point. This is a fine
85detail and is really only a matter of definition. Any side effects of
86this can be rendered invisible by a subclass.</p>
87 </body>
88</html>
Note: See TracBrowser for help on using the repository browser.