Package org.hipparchus.dfp
Class DfpField
java.lang.Object
org.hipparchus.dfp.DfpField
Field for Decimal floating point instances.
-
Nested Class Summary
-
Field Summary
Modifier and TypeFieldDescriptionstatic final int
IEEE 854-1987 flag for division by zero.static final int
IEEE 854-1987 flag for inexact result.static final int
IEEE 854-1987 flag for invalid operation.static final int
IEEE 854-1987 flag for overflow.static final int
IEEE 854-1987 flag for underflow. -
Constructor Summary
ConstructorDescriptionDfpField
(int decimalDigits) Create a factory for the specified number of radix digits. -
Method Summary
Modifier and TypeMethodDescriptionvoid
Clears the IEEE 854 status flags.static Dfp
computeExp
(Dfp a, Dfp one) Compute exp(a).static Dfp
Compute ln(a).boolean
Get the degrees to radians conversion factor.getE()
Get the constant e.Dfp[]
Get the constant e split in two pieces.getExtendedField
(int digitsFactor, boolean computeConstants) Get extended field for accuracy conversion.int
Get the IEEE 854 status flags.getLn10()
Get the constant ln(10).getLn2()
Get the constant ln(2).Dfp[]
Get the constant ln(2) split in two pieces.getLn5()
Get the constant ln(5).Dfp[]
Get the constant ln(5) split in two pieces.getOne()
Get the constant 1.getPi()
Get the constant π.Dfp[]
Get the constant π split in two pieces.int
Get the number of radix digits of theDfp
instances built by this factory.Get the radians to degrees conversion factor.Get the current rounding mode.Returns the runtime class of the FieldElement.getSqr2()
Get the constant √2.Get the constant √2 / 2.Dfp[]
Get the constant √2 split in two pieces.getSqr3()
Get the constant √3.Get the constant √3 / 3.getTwo()
Get the constant 2.getZero()
Get the constant 0.int
hashCode()
newDfp()
Makes aDfp
with a value of 0.newDfp
(byte x) Create an instance from a byte value.newDfp
(byte sign, byte nans) Creates aDfp
with a non-finite value.newDfp
(double x) Create an instance from a double value.newDfp
(int x) Create an instance from an int value.newDfp
(long x) Create an instance from a long value.Create aDfp
given a String representation.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
Set the rounding mode.
-
Field Details
-
FLAG_INVALID
public static final int FLAG_INVALIDIEEE 854-1987 flag for invalid operation.- See Also:
-
FLAG_DIV_ZERO
public static final int FLAG_DIV_ZEROIEEE 854-1987 flag for division by zero.- See Also:
-
FLAG_OVERFLOW
public static final int FLAG_OVERFLOWIEEE 854-1987 flag for overflow.- See Also:
-
FLAG_UNDERFLOW
public static final int FLAG_UNDERFLOWIEEE 854-1987 flag for underflow.- See Also:
-
FLAG_INEXACT
public static final int FLAG_INEXACTIEEE 854-1987 flag for inexact result.- See Also:
-
-
Constructor Details
-
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 Details
-
getRadixDigits
public int getRadixDigits()Get the number of radix digits of theDfp
instances built by this factory.- Returns:
- number of radix digits
-
setRoundingMode
Set the rounding mode. If not set, the default value isDfpField.RoundingMode.ROUND_HALF_EVEN
. -
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
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:
-
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:
-
newDfp
Makes aDfp
with a value of 0.- Returns:
- a new
Dfp
with a value of 0
-
newDfp
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
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
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
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
Copy constructor.- Parameters:
d
- instance to copy- Returns:
- a new
Dfp
with the same value as d
-
newDfp
Create aDfp
given a String representation.- Parameters:
s
- string representation of the instance- Returns:
- a new
Dfp
parsed from specified string
-
newDfp
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
Get the constant 0. -
getOne
Get the constant 1. -
getRuntimeClass
Returns the runtime class of the FieldElement.- Specified by:
getRuntimeClass
in interfaceField<Dfp>
- Returns:
- The
Class
object that represents the runtime class of this object.
-
getTwo
Get the constant 2.- Returns:
- a
Dfp
with value 2
-
getSqr2
Get the constant √2.- Returns:
- a
Dfp
with value √2
-
getSqr2Split
Get the constant √2 split in two pieces.- Returns:
- a
Dfp
with value √2 split in two pieces
-
getSqr2Reciprocal
Get the constant √2 / 2.- Returns:
- a
Dfp
with value √2 / 2
-
getSqr3
Get the constant √3.- Returns:
- a
Dfp
with value √3
-
getSqr3Reciprocal
Get the constant √3 / 3.- Returns:
- a
Dfp
with value √3 / 3
-
getPi
Get the constant π.- Returns:
- a
Dfp
with value π
-
getDegToRad
Get the degrees to radians conversion factor.- Returns:
- a
Dfp
for degrees to radians conversion factor
-
getRadToDeg
Get the radians to degrees conversion factor.- Returns:
- a
Dfp
for radians to degrees conversion factor
-
getPiSplit
Get the constant π split in two pieces.- Returns:
- a
Dfp
with value π split in two pieces
-
getE
Get the constant e.- Returns:
- a
Dfp
with value e
-
getESplit
Get the constant e split in two pieces.- Returns:
- a
Dfp
with value e split in two pieces
-
getLn2
Get the constant ln(2).- Returns:
- a
Dfp
with value ln(2)
-
getLn2Split
Get the constant ln(2) split in two pieces.- Returns:
- a
Dfp
with value ln(2) split in two pieces
-
getLn5
Get the constant ln(5).- Returns:
- a
Dfp
with value ln(5)
-
getLn5Split
Get the constant ln(5) split in two pieces.- Returns:
- a
Dfp
with value ln(5) split in two pieces
-
getLn10
Get the constant ln(10).- Returns:
- a
Dfp
with value ln(10)
-
equals
Two fields are considered equals if they have the same number of radix digits and the same rounding mode.
-
hashCode
public int hashCode() -
computeExp
Compute exp(a).- Parameters:
a
- number for which we want the exponentialone
- constant with value 1 at desired precision- Returns:
- exp(a)
-
computeLn
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)
-
getExtendedField
Get extended field for accuracy conversion.- Parameters:
digitsFactor
- multiplication factor for number of digitscomputeConstants
- if true, the transcendental constants for the given precision must be computed (setting this flag to false is RESERVED for the internal recursive call)- Returns:
- field with extended precision
- Since:
- 1.7
-