Class DfpField
- java.lang.Object
-
- org.apache.commons.math4.legacy.core.dfp.DfpField
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classDfpField.RoundingModeEnumerate for rounding modes.
-
Field Summary
Fields Modifier and Type Field Description static intFLAG_DIV_ZEROIEEE 854-1987 flag for division by zero.static intFLAG_INEXACTIEEE 854-1987 flag for inexact result.static intFLAG_INVALIDIEEE 854-1987 flag for invalid operation.static intFLAG_OVERFLOWIEEE 854-1987 flag for overflow.static intFLAG_UNDERFLOWIEEE 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 voidclearIEEEFlags()Clears the IEEE 854 status flags.static DfpcomputeExp(Dfp a, Dfp one)Compute exp(a).static DfpcomputeLn(Dfp a, Dfp one, Dfp two)Compute ln(a).DfpgetE()Get the constant e.Dfp[]getESplit()Get the constant e split in two pieces.intgetIEEEFlags()Get the IEEE 854 status flags.DfpgetLn10()Get the constant ln(10).DfpgetLn2()Get the constant ln(2).Dfp[]getLn2Split()Get the constant ln(2) split in two pieces.DfpgetLn5()Get the constant ln(5).Dfp[]getLn5Split()Get the constant ln(5) split in two pieces.DfpgetOne()Get the constant 1.DfpgetPi()Get the constant π.Dfp[]getPiSplit()Get the constant π split in two pieces.intgetRadixDigits()Get the number of radix digits of theDfpinstances built by this factory.DfpField.RoundingModegetRoundingMode()Get the current rounding mode.Class<? extends FieldElement<Dfp>>getRuntimeClass()Returns the runtime class of the FieldElement.DfpgetSqr2()Get the constant √2.DfpgetSqr2Reciprocal()Get the constant √2 / 2.Dfp[]getSqr2Split()Get the constant √2 split in two pieces.DfpgetSqr3()Get the constant √3.DfpgetSqr3Reciprocal()Get the constant √3 / 3.DfpgetTwo()Get the constant 2.DfpgetZero()Get the constant 0.DfpnewDfp()Makes aDfpwith a value of 0.DfpnewDfp(byte x)Create an instance from a byte value.DfpnewDfp(byte sign, byte nans)Creates aDfpwith a non-finite value.DfpnewDfp(double x)Create an instance from a double value.DfpnewDfp(int x)Create an instance from an int value.DfpnewDfp(long x)Create an instance from a long value.DfpnewDfp(String s)Create aDfpgiven a String representation.DfpnewDfp(Dfp d)Copy constructor.voidsetIEEEFlags(int flags)Sets the IEEE 854 status flags.voidsetIEEEFlagsBits(int bits)Sets some bits in the IEEE 854 status flags, without changing the already set bits.voidsetRoundingMode(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
Dfpclass 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 theDfpinstances 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
Dfpwith 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
Dfpwith 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
Dfpwith 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
Dfpwith the same value as x
-
newDfp
public Dfp newDfp(Dfp d)
Copy constructor.- Parameters:
d- instance to copy- Returns:
- a new
Dfpwith the same value as d
-
newDfp
public Dfp newDfp(String s)
Create aDfpgiven a String representation.- Parameters:
s- string representation of the instance- Returns:
- a new
Dfpparsed from specified string
-
newDfp
public Dfp newDfp(byte sign, byte nans)
Creates aDfpwith 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
Dfpwith a non-finite value
-
getRuntimeClass
public Class<? extends FieldElement<Dfp>> getRuntimeClass()
Returns the runtime class of the FieldElement.- Specified by:
getRuntimeClassin interfaceField<Dfp>- Returns:
- The
Classobject that represents the runtime class of this object.
-
getSqr2Split
public Dfp[] getSqr2Split()
Get the constant √2 split in two pieces.- Returns:
- a
Dfpwith value √2 split in two pieces
-
getSqr2Reciprocal
public Dfp getSqr2Reciprocal()
Get the constant √2 / 2.- Returns:
- a
Dfpwith value √2 / 2
-
getSqr3Reciprocal
public Dfp getSqr3Reciprocal()
Get the constant √3 / 3.- Returns:
- a
Dfpwith value √3 / 3
-
getPiSplit
public Dfp[] getPiSplit()
Get the constant π split in two pieces.- Returns:
- a
Dfpwith value π split in two pieces
-
getESplit
public Dfp[] getESplit()
Get the constant e split in two pieces.- Returns:
- a
Dfpwith value e split in two pieces
-
getLn2Split
public Dfp[] getLn2Split()
Get the constant ln(2) split in two pieces.- Returns:
- a
Dfpwith value ln(2) split in two pieces
-
getLn5Split
public Dfp[] getLn5Split()
Get the constant ln(5) split in two pieces.- Returns:
- a
Dfpwith 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)
-
-