Class DfpField

java.lang.Object
org.hipparchus.dfp.DfpField
All Implemented Interfaces:
Field<Dfp>

public class DfpField extends Object implements Field<Dfp>
Field for Decimal floating point instances.
  • Field Details

    • FLAG_INVALID

      public static final int FLAG_INVALID
      IEEE 854-1987 flag for invalid operation.
      See Also:
    • FLAG_DIV_ZERO

      public static final int FLAG_DIV_ZERO
      IEEE 854-1987 flag for division by zero.
      See Also:
    • FLAG_OVERFLOW

      public static final int FLAG_OVERFLOW
      IEEE 854-1987 flag for overflow.
      See Also:
    • FLAG_UNDERFLOW

      public static final int FLAG_UNDERFLOW
      IEEE 854-1987 flag for underflow.
      See Also:
    • FLAG_INEXACT

      public static final int FLAG_INEXACT
      IEEE 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 the Dfp 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 is DfpField.RoundingMode.ROUND_HALF_EVEN.
      Parameters:
      mode - desired rounding mode Note that the rounding mode is common to all Dfp instances belonging to the current DfpField in the system and will affect all future calculations.
    • 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

      public void clearIEEEFlags()
      Clears the IEEE 854 status flags.
      See Also:
    • 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

      public Dfp newDfp()
      Makes a Dfp with a value of 0.
      Returns:
      a new Dfp with a value of 0
    • 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(String s)
      Create a Dfp 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 a Dfp with a non-finite value.
      Parameters:
      sign - sign of the Dfp to create
      nans - code of the value, must be one of Dfp.INFINITE, Dfp.SNAN, Dfp.QNAN
      Returns:
      a new Dfp with a non-finite value
    • getZero

      public Dfp getZero()
      Get the constant 0.
      Specified by:
      getZero in interface Field<Dfp>
      Returns:
      a Dfp with value 0
    • getOne

      public Dfp getOne()
      Get the constant 1.
      Specified by:
      getOne in interface Field<Dfp>
      Returns:
      a Dfp with value 1
    • getRuntimeClass

      public Class<Dfp> getRuntimeClass()
      Returns the runtime class of the FieldElement.
      Specified by:
      getRuntimeClass in interface Field<Dfp>
      Returns:
      The Class object that represents the runtime class of this object.
    • getTwo

      public Dfp getTwo()
      Get the constant 2.
      Returns:
      a Dfp with value 2
    • getSqr2

      public Dfp getSqr2()
      Get the constant √2.
      Returns:
      a Dfp with value √2
    • 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
    • getSqr3

      public Dfp getSqr3()
      Get the constant √3.
      Returns:
      a Dfp with value √3
    • getSqr3Reciprocal

      public Dfp getSqr3Reciprocal()
      Get the constant √3 / 3.
      Returns:
      a Dfp with value √3 / 3
    • getPi

      public Dfp getPi()
      Get the constant π.
      Returns:
      a Dfp with value π
    • getDegToRad

      public Dfp getDegToRad()
      Get the degrees to radians conversion factor.
      Returns:
      a Dfp for degrees to radians conversion factor
    • getRadToDeg

      public Dfp getRadToDeg()
      Get the radians to degrees conversion factor.
      Returns:
      a Dfp for radians to degrees conversion factor
    • getPiSplit

      public Dfp[] getPiSplit()
      Get the constant π split in two pieces.
      Returns:
      a Dfp with value π split in two pieces
    • getE

      public Dfp getE()
      Get the constant e.
      Returns:
      a Dfp with value e
    • getESplit

      public Dfp[] getESplit()
      Get the constant e split in two pieces.
      Returns:
      a Dfp with value e split in two pieces
    • getLn2

      public Dfp getLn2()
      Get the constant ln(2).
      Returns:
      a Dfp with value ln(2)
    • getLn2Split

      public Dfp[] getLn2Split()
      Get the constant ln(2) split in two pieces.
      Returns:
      a Dfp with value ln(2) split in two pieces
    • getLn5

      public Dfp getLn5()
      Get the constant ln(5).
      Returns:
      a Dfp with value ln(5)
    • getLn5Split

      public Dfp[] getLn5Split()
      Get the constant ln(5) split in two pieces.
      Returns:
      a Dfp with value ln(5) split in two pieces
    • getLn10

      public Dfp getLn10()
      Get the constant ln(10).
      Returns:
      a Dfp with value ln(10)
    • equals

      public boolean equals(Object other)

      Two fields are considered equals if they have the same number of radix digits and the same rounding mode.

      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • computeExp

      public static Dfp computeExp(Dfp a, Dfp one)
      Compute exp(a).
      Parameters:
      a - number for which we want the exponential
      one - 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 exponential
      one - constant with value 1 at desired precision
      two - constant with value 2 at desired precision
      Returns:
      ln(a)
    • getExtendedField

      public DfpField getExtendedField(int digitsFactor, boolean computeConstants)
      Get extended field for accuracy conversion.
      Parameters:
      digitsFactor - multiplication factor for number of digits
      computeConstants - 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