

PREV CLASS NEXT CLASS  FRAMES NO FRAMES  
SUMMARY: NESTED  FIELD  CONSTR  METHOD  DETAIL: FIELD  CONSTR  METHOD 
java.lang.Object org.apache.commons.math3.dfp.Dfp
public class Dfp
Decimal floating point library for Java
Another floating point class. This one is built using radix 10000 which is 10^{4}, so its almost decimal.
The design goals here are:
Trade offs:
Numbers are represented in the following form:
n = sign × mant × (radix)^{exp};where sign is ±1, mantissa represents a fractional number between zero and one. mant[0] is the least significant digit. exp is in the range of 32767 to 32768
IEEE 8541987 Notes and differences
IEEE 854 requires the radix to be either 2 or 10. The radix here is 10000, so that requirement is not met, but it is possible that a subclassed can be made to make it behave as a radix 10 number. It is my opinion that if it looks and behaves as a radix 10 number then it is one and that requirement would be met.
The radix of 10000 was chosen because it should be faster to operate on 4 decimal digits at once instead of one at a time. Radix 10 behavior can be realized by adding an additional rounding step to ensure that the number of decimal digits represented is constant.
The IEEE standard specifically leaves out internal data encoding, so it is reasonable to conclude that such a subclass of this radix 10000 system is merely an encoding of a radix 10 system.
IEEE 854 also specifies the existence of "subnormal" numbers. This class does not contain any such entities. The most significant radix 10000 digit is always nonzero. Instead, we support "gradual underflow" by raising the underflow flag for numbers less with exponent less than expMin, but don't flush to zero until the exponent reaches MIN_EXPdigits. Thus the smallest number we can represent would be: 1E((MIN_EXPdigits1)*4), eg, for digits=5, MIN_EXP=32767, that would be 1e131092.
IEEE 854 defines that the implied radix point lies just to the right of the most significant digit and to the left of the remaining digits. This implementation puts the implied radix point to the left of all digits including the most significant one. The most significant digit here is the one just to the right of the radix point. This is a fine detail and is really only a matter of definition. Any side effects of this can be rendered invisible by a subclass.
DfpField
Field Summary  

static int 
ERR_SCALE
The amount under/overflows are scaled by before going to trap handler 
protected int 
exp
Exponent. 
static byte 
FINITE
Indicator value for normal finite numbers. 
static byte 
INFINITE
Indicator value for Infinity. 
protected int[] 
mant
Mantissa. 
static int 
MAX_EXP
The maximum exponent before overflow is signaled and results flushed to infinity 
static int 
MIN_EXP
The minimum exponent before underflow is signaled. 
protected byte 
nans
Indicator for nonfinite / nonnumber values. 
static byte 
QNAN
Indicator value for quiet NaN. 
static int 
RADIX
The radix, or base of this system. 
protected byte 
sign
Sign bit: 1 for positive, 1 for negative. 
static byte 
SNAN
Indicator value for signaling NaN. 
Constructor Summary  


Dfp(Dfp d)
Copy constructor. 
protected 
Dfp(DfpField field)
Makes an instance with a value of zero. 
protected 
Dfp(DfpField field,
byte x)
Create an instance from a byte value. 
protected 
Dfp(DfpField field,
byte sign,
byte nans)
Creates an instance with a nonfinite value. 
protected 
Dfp(DfpField field,
double x)
Create an instance from a double value. 
protected 
Dfp(DfpField field,
int x)
Create an instance from an int value. 
protected 
Dfp(DfpField field,
long x)
Create an instance from a long value. 
protected 
Dfp(DfpField field,
String s)
Create an instance from a String representation. 
Method Summary  

Dfp 
abs()
Get the absolute value of instance. 
Dfp 
add(Dfp x)
Add x to this. 
protected int 
align(int e)
Make our exp equal to the supplied one, this may cause rounding. 
Dfp 
ceil()
Round to an integer using the round ceil mode. 
int 
classify()
Returns the type  one of FINITE, INFINITE, SNAN, QNAN. 
protected int 
complement(int extra)
Negate the mantissa of this by computing the complement. 
static Dfp 
copysign(Dfp x,
Dfp y)
Creates an instance that is the same as x except that it has the sign of y. 
protected String 
dfp2sci()
Convert an instance to a string using scientific notation. 
protected String 
dfp2string()
Convert an instance to a string using normal notation. 
Dfp 
divide(Dfp divisor)
Divide this by divisor. 
Dfp 
divide(int divisor)
Divide by a single digit less than radix. 
Dfp 
dotrap(int type,
String what,
Dfp oper,
Dfp result)
Raises a trap. 
boolean 
equals(Object other)
Check if instance is equal to x. 
Dfp 
floor()
Round to an integer using the round floor mode. 
DfpField 
getField()
Get the Field (really a DfpField ) to which the instance belongs. 
Dfp 
getOne()
Get the constant 1. 
int 
getRadixDigits()
Get the number of radix digits of the instance. 
Dfp 
getTwo()
Get the constant 2. 
Dfp 
getZero()
Get the constant 0. 
boolean 
greaterThan(Dfp x)
Check if instance is greater than x. 
int 
hashCode()
Gets a hashCode for the instance. 
int 
intValue()
Convert this to an integer. 
boolean 
isInfinite()
Check if instance is infinite. 
boolean 
isNaN()
Check if instance is not a number. 
boolean 
isZero()
Check if instance is equal to zero. 
boolean 
lessThan(Dfp x)
Check if instance is less than x. 
int 
log10()
Get the exponent of the greatest power of 10 that is less than or equal to abs(this). 
int 
log10K()
Get the exponent of the greatest power of 10000 that is less than or equal to the absolute value of this. 
Dfp 
multiply(Dfp x)
Multiply this by x. 
Dfp 
multiply(int x)
Multiply this by a single digit x. 
Dfp 
negate()
Returns a number that is this number with the sign bit reversed. 
boolean 
negativeOrNull()
Check if instance is less than or equal to 0. 
Dfp 
newInstance()
Create an instance with a value of 0. 
Dfp 
newInstance(byte x)
Create an instance from a byte value. 
Dfp 
newInstance(byte sig,
byte code)
Creates an instance with a nonfinite value. 
Dfp 
newInstance(Dfp d)
Create an instance by copying an existing one. 
Dfp 
newInstance(double x)
Create an instance from a double value. 
Dfp 
newInstance(int x)
Create an instance from an int value. 
Dfp 
newInstance(long x)
Create an instance from a long value. 
Dfp 
newInstance(String s)
Create an instance from a String representation. 
Dfp 
nextAfter(Dfp x)
Returns the next number greater than this one in the direction of x. 
boolean 
positiveOrNull()
Check if instance is greater than or equal to 0. 
Dfp 
power10(int e)
Return the specified power of 10. 
Dfp 
power10K(int e)
Get the specified power of 10000. 
Dfp 
reciprocal()
Returns the multiplicative inverse of this element. 
Dfp 
remainder(Dfp d)
Returns the IEEE remainder. 
Dfp 
rint()
Round to nearest integer using the roundhalfeven method. 
protected int 
round(int n)
Round this given the next digit n using the current rounding mode. 
protected void 
shiftLeft()
Shift the mantissa left, and adjust the exponent to compensate. 
protected void 
shiftRight()
Shift the mantissa right, and adjust the exponent to compensate. 
Dfp 
sqrt()
Compute the square root. 
boolean 
strictlyNegative()
Check if instance is strictly less than 0. 
boolean 
strictlyPositive()
Check if instance is strictly greater than 0. 
Dfp 
subtract(Dfp x)
Subtract x from this. 
double 
toDouble()
Convert the instance into a double. 
double[] 
toSplitDouble()
Convert the instance into a split double. 
String 
toString()
Get a string representation of the instance. 
protected Dfp 
trap(int type,
String what,
Dfp oper,
Dfp def,
Dfp result)
Trap handler. 
protected Dfp 
trunc(DfpField.RoundingMode rmode)
Does the integer conversions with the specified rounding. 
boolean 
unequal(Dfp x)
Check if instance is not equal to x. 
Methods inherited from class java.lang.Object 

clone, finalize, getClass, notify, notifyAll, wait, wait, wait 
Field Detail 

public static final int RADIX
public static final int MIN_EXP
public static final int MAX_EXP
public static final int ERR_SCALE
public static final byte FINITE
public static final byte INFINITE
public static final byte SNAN
public static final byte QNAN
protected int[] mant
protected byte sign
protected int exp
protected byte nans
Constructor Detail 

protected Dfp(DfpField field)
field
 field to which this instance belongsprotected Dfp(DfpField field, byte x)
field
 field to which this instance belongsx
 value to convert to an instanceprotected Dfp(DfpField field, int x)
field
 field to which this instance belongsx
 value to convert to an instanceprotected Dfp(DfpField field, long x)
field
 field to which this instance belongsx
 value to convert to an instanceprotected Dfp(DfpField field, double x)
field
 field to which this instance belongsx
 value to convert to an instancepublic Dfp(Dfp d)
d
 instance to copyprotected Dfp(DfpField field, String s)
field
 field to which this instance belongss
 string representation of the instanceprotected Dfp(DfpField field, byte sign, byte nans)
field
 field to which this instance belongssign
 sign of the Dfp to createnans
 code of the value, must be one of INFINITE
,
SNAN
, QNAN
Method Detail 

public Dfp newInstance()
public Dfp newInstance(byte x)
x
 value to convert to an instance
public Dfp newInstance(int x)
x
 value to convert to an instance
public Dfp newInstance(long x)
x
 value to convert to an instance
public Dfp newInstance(double x)
x
 value to convert to an instance
public Dfp newInstance(Dfp d)
d
 instance to copy
public Dfp newInstance(String s)
s
 string representation of the instance
public Dfp newInstance(byte sig, byte code)
sig
 sign of the Dfp to createcode
 code of the value, must be one of INFINITE
,
SNAN
, QNAN
public DfpField getField()
Field
(really a DfpField
) to which the instance belongs.
The field is linked to the number of digits and acts as a factory
for Dfp
instances.
getField
in interface FieldElement<Dfp>
Field
(really a DfpField
) to which the instance belongspublic int getRadixDigits()
public Dfp getZero()
public Dfp getOne()
public Dfp getTwo()
protected void shiftLeft()
protected void shiftRight()
protected int align(int e)
e
 desired exponent
public boolean lessThan(Dfp x)
x
 number to check instance against
public boolean greaterThan(Dfp x)
x
 number to check instance against
public boolean negativeOrNull()
public boolean strictlyNegative()
public boolean positiveOrNull()
public boolean strictlyPositive()
public Dfp abs()
public boolean isInfinite()
public boolean isNaN()
public boolean isZero()
public boolean equals(Object other)
equals
in class Object
other
 object to check instance against
public int hashCode()
hashCode
in class Object
public boolean unequal(Dfp x)
x
 number to check instance against
public Dfp rint()
public Dfp floor()
public Dfp ceil()
public Dfp remainder(Dfp d)
d
 divisor
protected Dfp trunc(DfpField.RoundingMode rmode)
rmode
 rounding mode to use
public int intValue()
public int log10K()
public Dfp power10K(int e)
e
 desired power
public int log10()
public Dfp power10(int e)
e
 desired power
protected int complement(int extra)
extra
 ???
public Dfp add(Dfp x)
add
in interface FieldElement<Dfp>
x
 number to add
public Dfp negate()
negate
in interface FieldElement<Dfp>
public Dfp subtract(Dfp x)
subtract
in interface FieldElement<Dfp>
x
 number to subtract
protected int round(int n)
n
 ???
public Dfp multiply(Dfp x)
multiply
in interface FieldElement<Dfp>
x
 multiplicand
public Dfp multiply(int x)
multiply
in interface FieldElement<Dfp>
x
 multiplicand
public Dfp divide(Dfp divisor)
divide
in interface FieldElement<Dfp>
divisor
 divisor
public Dfp divide(int divisor)
divisor
 divisor
public Dfp reciprocal()
this
element.
reciprocal
in interface FieldElement<Dfp>
this
.public Dfp sqrt()
public String toString()
toString
in class Object
protected String dfp2sci()
protected String dfp2string()
public Dfp dotrap(int type, String what, Dfp oper, Dfp result)
type
 the trap typewhat
  name of routine trap occurred inoper
  input operator to functionresult
  the result computed prior to the trap
protected Dfp trap(int type, String what, Dfp oper, Dfp def, Dfp result)
type
 The exception type  e.g. FLAG_OVERFLOWwhat
 The name of the routine we were in e.g. divide()oper
 An operand to this function if anydef
 The default return value if trap not enabledresult
 The result that is specified to be delivered per
IEEE 854, if any
public int classify()
public static Dfp copysign(Dfp x, Dfp y)
x
 number to get the value fromy
 number to get the sign from
public Dfp nextAfter(Dfp x)
x
 direction where to look at
public double toDouble()
toSplitDouble()
public double[] toSplitDouble()
toDouble()


PREV CLASS NEXT CLASS  FRAMES NO FRAMES  
SUMMARY: NESTED  FIELD  CONSTR  METHOD  DETAIL: FIELD  CONSTR  METHOD 