Package org.apache.commons.math.dfp
Class DfpField
- java.lang.Object
-
- org.apache.commons.math.dfp.DfpField
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
DfpField.RoundingMode
Enumerate for rounding modes.
-
Field Summary
Fields Modifier and Type Field Description static int
FLAG_DIV_ZERO
IEEE 854-1987 flag for division by zero.static int
FLAG_INEXACT
IEEE 854-1987 flag for inexact result.static int
FLAG_INVALID
IEEE 854-1987 flag for invalid operation.static int
FLAG_OVERFLOW
IEEE 854-1987 flag for overflow.static int
FLAG_UNDERFLOW
IEEE 854-1987 flag for underflow.
-
Constructor Summary
Constructors Constructor Description DfpField(int decimalDigits)
Create a factory for the specified number of radix digits.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
clearIEEEFlags()
Clears the IEEE 854 status flags.static Dfp
computeExp(Dfp a, Dfp one)
Compute exp(a).static Dfp
computeLn(Dfp a, Dfp one, Dfp two)
Compute ln(a).Dfp
getE()
Get the constant e.Dfp[]
getESplit()
Get the constant e split in two pieces.int
getIEEEFlags()
Get the IEEE 854 status flags.Dfp
getLn10()
Get the constant ln(10).Dfp
getLn2()
Get the constant ln(2).Dfp[]
getLn2Split()
Get the constant ln(2) split in two pieces.Dfp
getLn5()
Get the constant ln(5).Dfp[]
getLn5Split()
Get the constant ln(5) split in two pieces.Dfp
getOne()
Get the constant 1.Dfp
getPi()
Get the constant π.Dfp[]
getPiSplit()
Get the constant π split in two pieces.int
getRadixDigits()
Get the number of radix digits of theDfp
instances built by this factory.DfpField.RoundingMode
getRoundingMode()
Get the current rounding mode.Dfp
getSqr2()
Get the constant √2.Dfp
getSqr2Reciprocal()
Get the constant √2 / 2.Dfp[]
getSqr2Split()
Get the constant √2 split in two pieces.Dfp
getSqr3()
Get the constant √3.Dfp
getSqr3Reciprocal()
Get the constant √3 / 3.Dfp
getTwo()
Get the constant 2.Dfp
getZero()
Get the constant 0.Dfp
newDfp()
Makes aDfp
with a value of 0.Dfp
newDfp(byte x)
Create an instance from a byte value.Dfp
newDfp(byte sign, byte nans)
Creates aDfp
with a non-finite value.Dfp
newDfp(double x)
Create an instance from a double value.Dfp
newDfp(int x)
Create an instance from an int value.Dfp
newDfp(long x)
Create an instance from a long value.Dfp
newDfp(java.lang.String s)
Create aDfp
given a String representation.Dfp
newDfp(Dfp d)
Copy constructor.void
setIEEEFlags(int flags)
Sets the IEEE 854 status flags.void
setIEEEFlagsBits(int bits)
Sets some bits in the IEEE 854 status flags, without changing the already set bits.void
setRoundingMode(DfpField.RoundingMode mode)
Set the rounding mode.
-
-
-
Field Detail
-
FLAG_INVALID
public static final int FLAG_INVALID
IEEE 854-1987 flag for invalid operation.- See Also:
- Constant Field Values
-
FLAG_DIV_ZERO
public static final int FLAG_DIV_ZERO
IEEE 854-1987 flag for division by zero.- See Also:
- Constant Field Values
-
FLAG_OVERFLOW
public static final int FLAG_OVERFLOW
IEEE 854-1987 flag for overflow.- See Also:
- Constant Field Values
-
FLAG_UNDERFLOW
public static final int FLAG_UNDERFLOW
IEEE 854-1987 flag for underflow.- See Also:
- Constant Field Values
-
FLAG_INEXACT
public static final int FLAG_INEXACT
IEEE 854-1987 flag for inexact result.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
DfpField
public DfpField(int decimalDigits)
Create a factory for the specified number of radix digits.Note that since the
Dfp
class uses 10000 as its radix, each radix digit is equivalent to 4 decimal digits. This implies that asking for 13, 14, 15 or 16 decimal digits will really lead to a 4 radix 10000 digits in all cases.- Parameters:
decimalDigits
- minimal number of decimal digits.
-
-
Method Detail
-
getRadixDigits
public int getRadixDigits()
Get the number of radix digits of theDfp
instances built by this factory.- Returns:
- number of radix digits
-
setRoundingMode
public void setRoundingMode(DfpField.RoundingMode mode)
Set the rounding mode. If not set, the default value isDfpField.RoundingMode.ROUND_HALF_EVEN
.
-
getRoundingMode
public DfpField.RoundingMode getRoundingMode()
Get the current rounding mode.- Returns:
- current rounding mode
-
getIEEEFlags
public int getIEEEFlags()
Get the IEEE 854 status flags.- Returns:
- IEEE 854 status flags
- See Also:
clearIEEEFlags()
,setIEEEFlags(int)
,setIEEEFlagsBits(int)
,FLAG_INVALID
,FLAG_DIV_ZERO
,FLAG_OVERFLOW
,FLAG_UNDERFLOW
,FLAG_INEXACT
-
clearIEEEFlags
public void clearIEEEFlags()
Clears the IEEE 854 status flags.
-
setIEEEFlags
public void setIEEEFlags(int flags)
Sets the IEEE 854 status flags.- Parameters:
flags
- desired value for the flags- See Also:
getIEEEFlags()
,clearIEEEFlags()
,setIEEEFlagsBits(int)
,FLAG_INVALID
,FLAG_DIV_ZERO
,FLAG_OVERFLOW
,FLAG_UNDERFLOW
,FLAG_INEXACT
-
setIEEEFlagsBits
public void setIEEEFlagsBits(int bits)
Sets some bits in the IEEE 854 status flags, without changing the already set bits.Calling this method is equivalent to call
setIEEEFlags(getIEEEFlags() | bits)
- Parameters:
bits
- bits to set- See Also:
getIEEEFlags()
,clearIEEEFlags()
,setIEEEFlags(int)
,FLAG_INVALID
,FLAG_DIV_ZERO
,FLAG_OVERFLOW
,FLAG_UNDERFLOW
,FLAG_INEXACT
-
newDfp
public Dfp newDfp(byte x)
Create an instance from a byte value.- Parameters:
x
- value to convert to an instance- Returns:
- a new
Dfp
with the same value as x
-
newDfp
public Dfp newDfp(int x)
Create an instance from an int value.- Parameters:
x
- value to convert to an instance- Returns:
- a new
Dfp
with the same value as x
-
newDfp
public Dfp newDfp(long x)
Create an instance from a long value.- Parameters:
x
- value to convert to an instance- Returns:
- a new
Dfp
with the same value as x
-
newDfp
public Dfp newDfp(double x)
Create an instance from a double value.- Parameters:
x
- value to convert to an instance- Returns:
- a new
Dfp
with the same value as x
-
newDfp
public Dfp newDfp(Dfp d)
Copy constructor.- Parameters:
d
- instance to copy- Returns:
- a new
Dfp
with the same value as d
-
newDfp
public Dfp newDfp(java.lang.String s)
Create aDfp
given a String representation.- Parameters:
s
- string representation of the instance- Returns:
- a new
Dfp
parsed from specified string
-
newDfp
public Dfp newDfp(byte sign, byte nans)
Creates aDfp
with a non-finite value.- Parameters:
sign
- sign of the Dfp to createnans
- code of the value, must be one ofDfp.INFINITE
,Dfp.SNAN
,Dfp.QNAN
- Returns:
- a new
Dfp
with a non-finite value
-
getZero
public Dfp getZero()
Get the constant 0.
-
getOne
public Dfp getOne()
Get the constant 1.
-
getSqr2Split
public Dfp[] getSqr2Split()
Get the constant √2 split in two pieces.- Returns:
- a
Dfp
with value √2 split in two pieces
-
getSqr2Reciprocal
public Dfp getSqr2Reciprocal()
Get the constant √2 / 2.- Returns:
- a
Dfp
with value √2 / 2
-
getSqr3Reciprocal
public Dfp getSqr3Reciprocal()
Get the constant √3 / 3.- Returns:
- a
Dfp
with value √3 / 3
-
getPiSplit
public Dfp[] getPiSplit()
Get the constant π split in two pieces.- Returns:
- a
Dfp
with value π split in two pieces
-
getESplit
public Dfp[] getESplit()
Get the constant e split in two pieces.- Returns:
- a
Dfp
with value e split in two pieces
-
getLn2Split
public Dfp[] getLn2Split()
Get the constant ln(2) split in two pieces.- Returns:
- a
Dfp
with value ln(2) split in two pieces
-
getLn5Split
public Dfp[] getLn5Split()
Get the constant ln(5) split in two pieces.- Returns:
- a
Dfp
with value ln(5) split in two pieces
-
computeExp
public static Dfp computeExp(Dfp a, Dfp one)
Compute exp(a).- Parameters:
a
- number for which we want the exponentialone
- constant with value 1 at desired precision- Returns:
- exp(a)
-
computeLn
public static Dfp computeLn(Dfp a, Dfp one, Dfp two)
Compute ln(a). Let f(x) = ln(x), We know that f'(x) = 1/x, thus from Taylor's theorem we have: ----- n+1 n f(x) = \ (-1) (x - 1) / ---------------- for 1 <= n <= infinity ----- n or 2 3 4 (x-1) (x-1) (x-1) ln(x) = (x-1) - ----- + ------ - ------ + ... 2 3 4 alternatively, 2 3 4 x x x ln(x+1) = x - - + - - - + ... 2 3 4 This series can be used to compute ln(x), but it converges too slowly. If we substitute -x for x above, we get 2 3 4 x x x ln(1-x) = -x - - - - - - + ... 2 3 4 Note that all terms are now negative. Because the even powered ones absorbed the sign. Now, subtract the series above from the previous one to get ln(x+1) - ln(1-x). Note the even terms cancel out leaving only the odd ones 3 5 7 2x 2x 2x ln(x+1) - ln(x-1) = 2x + --- + --- + ---- + ... 3 5 7 By the property of logarithms that ln(a) - ln(b) = ln (a/b) we have: 3 5 7 x+1 / x x x \ ln ----- = 2 * | x + ---- + ---- + ---- + ... | x-1 \ 3 5 7 / But now we want to find ln(a), so we need to find the value of x such that a = (x+1)/(x-1). This is easily solved to find that x = (a-1)/(a+1).- Parameters:
a
- number for which we want the exponentialone
- constant with value 1 at desired precisiontwo
- constant with value 2 at desired precision- Returns:
- ln(a)
-
-