Class BCDFraction

  • All Implemented Interfaces:
    Cloneable, Comparable<Number>, Number

    public final class BCDFraction
    extends Object
    implements Number
    Decimal_Fraction Arithmetic.

    For the use in an FX-603P Simulator the precision is fixed at 14 decimal digits.

    • Field Detail

      • Logger

        private static final Logger Logger

        Class logger instance.

      • TAG

        private static final String TAG

        Class logger tag.

      • Values_2

        private static final Pattern Values_2

        matches «2/3»

      • Values_3

        private static final Pattern Values_3

        matches «1 2/3»

      • Approx_e

        @NotNull
        public static final @NotNull BCDFraction Approx_e

        e approximation used for unit tests

      • Approx_π

        @NotNull
        public static final @NotNull BCDFraction Approx_π

        π approximation used for unit tests

      • Num_0

        @NotNull
        public static final @NotNull BCDFraction Num_0

        0

      • Num_1

        @NotNull
        public static final @NotNull BCDFraction Num_1

        1

      • Num_180

        @NotNull
        public static final @NotNull BCDFraction Num_180

        180

      • Num_2

        @NotNull
        public static final @NotNull BCDFraction Num_2

        2

      • Num_200

        @NotNull
        public static final @NotNull BCDFraction Num_200

        200

      • Denominator

        @NotNull
        private @NotNull BCDInteger Denominator

        The Denominator:

        Whole + Numerator / Denominator
      • Numerator

        @NotNull
        private @NotNull BCDInteger Numerator

        The Numerator:

        Numerator / Denominator
    • Constructor Detail

      • BCDFraction

        public BCDFraction​(@NotNull
                           @NotNull BCDFraction Value)

        create new fraction

        Parameters:
        Value - value to copy
      • BCDFraction

        public BCDFraction​(@NotNull
                           @NotNull BCDInteger Whole)

        create new fraction

        Parameters:
        Whole - The whole part of the number
      • BCDFraction

        public BCDFraction​(@NotNull
                           @NotNull BCDInteger Numerator,
                           @NotNull
                           @NotNull BCDInteger Denominator)

        create new fraction

        Parameters:
        Numerator - The numerator
        Denominator - The denominator
      • BCDFraction

        public BCDFraction​(long Whole)

        create new fraction

        Parameters:
        Whole - The whole part of the number
      • BCDFraction

        public BCDFraction​(long Whole,
                           long Numerator,
                           long Denominator)

        create new fraction

        Parameters:
        Whole - The whole part of the number
        Numerator - The numerator
        Denominator - The denominator
      • BCDFraction

        public BCDFraction​(@NotNull
                           @NotNull Number Whole,
                           @NotNull
                           @NotNull Number Numerator,
                           @NotNull
                           @NotNull BCDInteger Denominator)

        create new fraction

        Parameters:
        Whole - The whole part of the number
        Numerator - The numerator
        Denominator - The denominator
      • BCDFraction

        public BCDFraction​(@NotNull
                           @NotNull String Text)

        create new fraction from a string

        Parameters:
        Text - A String of the type "999" or “999/999” or "999 999/999"
    • Method Detail

      • $div

        @Contract(pure=true)
        @NotNull
        public @NotNull Number $div​(@NotNull
                                    @NotNull Number y)
        x ÷ y
        Specified by:
        $div in interface Number
        Parameters:
        y - divisor
        Returns:
        x ÷ y
      • $minus

        @Contract(pure=true)
        @NotNull
        public @NotNull Number $minus​(@NotNull
                                      @NotNull Number y)
        x - y
        Specified by:
        $minus in interface Number
        Parameters:
        y - value to subtract
        Returns:
        x - y
      • $plus

        @Contract(pure=true)
        @NotNull
        public @NotNull Number $plus​(@NotNull
                                     @NotNull Number y)
        x + y
        Specified by:
        $plus in interface Number
        Parameters:
        y - value to add
        Returns:
        x + y
      • $times

        @Contract(pure=true)
        @NotNull
        public @NotNull Number $times​(@NotNull
                                      @NotNull Number y)
        x × y
        Specified by:
        $times in interface Number
        Parameters:
        y - Multiplier
        Returns:
        x × y
      • $times$times

        @Contract(pure=true)
        @NotNull
        public @NotNull Number $times$times​(@NotNull
                                            @NotNull Number y)
                                     throws BCDError
        xy
        Specified by:
        $times$times in interface Number
        Parameters:
        y - power
        Returns:
        xy
        Throws:
        BCDError - calculation error
      • As_BCDFloat

        @NotNull
        public @NotNull BCDFloat As_BCDFloat()

        Either convert to a BCDFloat or return this.

        Specified by:
        As_BCDFloat in interface Number
        Returns:
        value as java int
      • As_BCDFraction

        @NotNull
        public @NotNull BCDFraction As_BCDFraction()

        Either convert to a or return this.

        Specified by:
        As_BCDFraction in interface Number
        Returns:
        value as java int
      • As_BCDInteger

        @NotNull
        public @NotNull BCDInteger As_BCDInteger()

        Either convert to a BCDInteger or return this.

        Specified by:
        As_BCDInteger in interface Number
        Returns:
        value as java int
      • Clone

        @NotNull
        public @NotNull Number Clone()
        clone the float - but it might be easier to use the provided copy Constructor instead.
        Specified by:
        Clone in interface Number
        Returns:
        a new BCDFloat from an existing one.
        See Also:
        Object.clone()
      • Coefficient_As_Long

        public long Coefficient_As_Long()
                                 throws BCDError

        coefficient - while a 18 digits number can also be represented as an long an 18digits multiplication need a 36digits temporary and that is more then a long can do.

        Specified by:
        Coefficient_As_Long in interface Number
        Returns:
        Coefficient
        Throws:
        BCDError - when it's not a normal number
      • Compare

        public int Compare​(@NotNull
                           @NotNull Number Value)
        Compare values
        Specified by:
        Compare in interface Number
        Parameters:
        Value - Value to compare with
        Returns:
        Compare_Equal
        Values are the same
        Compare_Less
        Left value less the right value
        Compare_Greater
        Left value greater the right value
      • Digits

        public byte[] Digits()
        number: sum(i = 0 ... Num_Digits-1; Digits[i]*10^i)
        Specified by:
        Digits in interface Number
      • Exponent

        public int Exponent()
                     throws BCDError
        current exponent - note that the exponent is based on the internal representation where the radix point is right most. For example π is 314159265358979324×10-17.
        Specified by:
        Exponent in interface Number
        Returns:
        Current exponent.
        Throws:
        BCDError - when the value is not finite
      • Fix

        @NotNull
        public @NotNull Number Fix​(int Decimal,
                                   int Exponent)
        Round to a given Precision after the decimal point.
        Specified by:
        Fix in interface Number
        Parameters:
        Decimal - decimal digits to keep
        Exponent - max exponent
        Returns:
        rounded value
      • Frac

        @NotNull
        public @NotNull Number Frac()
        Recompose a frac double from the given data.
        Specified by:
        Frac in interface Number
        Returns:
        a double
      • Indirect_Value

        public int Indirect_Value​(int Digit_Count)

        Get valuef or indirect addressing.

        Specified by:
        Indirect_Value in interface Number
        Parameters:
        Digit_Count - Should be 1 … 2 depending if value is used to access memory or perform a goto.
        Returns:
        int value for indirect addressing.
      • Integer

        @NotNull
        public @NotNull Number Integer()

        integer part of the BCDFloat

        Do not mix up with To_Integer - This version returns another BCDFloat!

        Specified by:
        Integer in interface Number
        Returns:
        integer part of this
      • Is_Finite

        public boolean Is_Finite()
        current value is a normal number
        Specified by:
        Is_Finite in interface Number
        Returns:
        true when it is a normal number
      • Is_Infinite

        public boolean Is_Infinite()
        current value is Infinity (but not N/A).
        Specified by:
        Is_Infinite in interface Number
        Returns:
        true when x is infinite
      • Is_Integer

        public boolean Is_Integer()
        Current value is integer value.
        Specified by:
        Is_Integer in interface Number
        Returns:
        true when x is an integer number
      • Is_NaN

        public boolean Is_NaN()
        current value is not a number
        Specified by:
        Is_NaN in interface Number
        Returns:
        when is not a number
      • Is_Negative

        public boolean Is_Negative()
        Current value us negative
        Specified by:
        Is_Negative in interface Number
        Returns:
        true when x <= -0
      • Is_Zero

        public boolean Is_Zero()
        value is 0
        Specified by:
        Is_Zero in interface Number
        Returns:
        true when x is 0
      • Normalize

        public void Normalize()

        normalize the value

        depending on type: remove leading zeros and / or trailing zeros

        Specified by:
        Normalize in interface Number
      • Num_Digits

        public int Num_Digits()
                       throws BCDError
        the current number of digits - not that when the number is not normalised there might be more 0's in the number then strictly needed.
        Specified by:
        Num_Digits in interface Number
        Returns:
        number of digits
        Throws:
        BCDError
      • P_To_X

        @Contract(pure=true)
        @NotNull
        public @NotNull Number P_To_X​(@NotNull
                                      @NotNull Number θ)
        Convert Polar to Rectangle Coordinates
        Specified by:
        P_To_X in interface Number
        Parameters:
        \u03b8 - angle
        Returns:
        x = cos (w) × r
      • P_To_X

        @Contract(pure=true)
        @NotNull
        public @NotNull Number P_To_X​(@NotNull
                                      @NotNull Number θ,
                                      @NotNull
                                      @NotNull Number Half_Circle)
        Convert Polar to Rectangle Coordinates
        Specified by:
        P_To_X in interface Number
        Parameters:
        \u03b8 - angle
        Half_Circle - 180 for deg, 200 for gra, pi for rad
        Returns:
        x = cos (θ) × r
      • P_To_Y

        @Contract(pure=true)
        @NotNull
        public @NotNull Number P_To_Y​(@NotNull
                                      @NotNull Number θ)
        Convert Polar to Rectangle Coordinates
        Specified by:
        P_To_Y in interface Number
        Parameters:
        \u03b8 - angle
        Returns:
        y = sin (θ) × r
      • P_To_Y

        @Contract(pure=true)
        @NotNull
        public @NotNull Number P_To_Y​(@NotNull
                                      @NotNull Number θ,
                                      @NotNull
                                      @NotNull Number Half_Circle)
        Convert Polar to Rectangle Coordinates
        Specified by:
        P_To_Y in interface Number
        Parameters:
        \u03b8 - angle
        Half_Circle - 180 for deg, 200 for gra, pi for rad
        Returns:
        y = sin (θ) × r
      • R_To_R

        @Contract(pure=true)
        @NotNull
        public @NotNull Number R_To_R​(@NotNull
                                      @NotNull Number y)
        Convert Rectangle to Polar Coordinates
        Specified by:
        R_To_R in interface Number
        Parameters:
        y - y position
        Returns:
        r = √(x²+y²)
      • R_To_θ

        @Contract(pure=true)
        @NotNull
        public @NotNull Number R_To_θ​(@NotNull
                                      @NotNull Number y)
        Convert Rectangle to Polar Coordinates
        Specified by:
        R_To_θ in interface Number
        Parameters:
        y - y position
        Returns:
        θ = arctan (y÷x)
      • R_To_θ

        @Contract(pure=true)
        @NotNull
        public @NotNull Number R_To_θ​(@NotNull
                                      @NotNull Number y,
                                      @NotNull
                                      @NotNull Number Half_Circle)
        Convert Rectangle to Polar Coordinates
        Specified by:
        R_To_θ in interface Number
        Parameters:
        y - y position
        Half_Circle - 180 for deg, 200 for gra, pi for rad
        Returns:
        θ = arctan (y÷x)
      • Round

        @NotNull
        public @NotNull Number Round()
        Round to effective Precision and Exponent.
        Specified by:
        Round in interface Number
        Returns:
        rounded value
      • Round

        @NotNull
        public @NotNull Number Round​(int Precision,
                                     int Exponent)
        Round to a given Precision and Exponent.
        Specified by:
        Round in interface Number
        Parameters:
        Precision - Total precison
        Exponent - max exponent
        Returns:
        rounded value
      • To_Debug_String

        @NotNull
        public @NotNull String To_Debug_String()
        convert to native/debug string representation
        Specified by:
        To_Debug_String in interface Number
        Returns:
        (Coefficient, Exponent)
      • To_Integer

        public int To_Integer()
        Convert to integer

        Do not mix up with Integer - This version returns a Java int!

        Specified by:
        To_Integer in interface Number
        Returns:
        value as java int
      • To_Long

        public long To_Long()
        Convert to long integer

        Do not mix up with Integer - This version returns a Java int!

        Specified by:
        To_Long in interface Number
        Returns:
        value as java int
      • a

        @NotNull
        public @NotNull BCDInteger a()

        Fraktur represented as «a b/c»

        Returns:
        a
      • abs

        @Contract(pure=true)
        @NotNull
        public @NotNull Number abs()
        |x|
        Specified by:
        abs in interface Number
        Returns:
        abs value
      • and

        @Contract(pure=true)
        @NotNull
        public @NotNull Number and​(@NotNull
                                   @NotNull Number y)

        Logical and

        Specified by:
        and in interface Number
        Returns:
        x ∧ y
      • arc_cos

        @Contract(pure=true)
        @NotNull
        public @NotNull Number arc_cos()
        arc cosine
        Specified by:
        arc_cos in interface Number
        Returns:
        arc cosine
      • arc_cos

        @Contract(pure=true)
        @NotNull
        public @NotNull Number arc_cos​(@NotNull
                                       @NotNull Number Half_Circle)
        arc cosine
        Specified by:
        arc_cos in interface Number
        Parameters:
        Half_Circle - value for a half circle
        Returns:
        arccos (x) ÷ π × Half_Circle
      • arc_cos_hyp

        @Contract(pure=true)
        @NotNull
        public @NotNull Number arc_cos_hyp()
        area hyperbolic cosine: loge (x + √(x-1) × √(x+1))
        Specified by:
        arc_cos_hyp in interface Number
        Returns:
        Hyperbolic sine.
      • arc_sin

        @Contract(pure=true)
        @NotNull
        public @NotNull Number arc_sin()
        arc sine
        Specified by:
        arc_sin in interface Number
        Returns:
        arc sine
      • arc_sin

        @Contract(pure=true)
        @NotNull
        public @NotNull Number arc_sin​(@NotNull
                                       @NotNull Number Half_Circle)
        arc sine
        Specified by:
        arc_sin in interface Number
        Parameters:
        Half_Circle - value for a half circle
        Returns:
        arcsin (x) ÷ π × Half_Circle
      • arc_sin_hyp

        @Contract(pure=true)
        @NotNull
        public @NotNull Number arc_sin_hyp()
        area hyperbolic sine: loge (x + √(x² + 1))
        Specified by:
        arc_sin_hyp in interface Number
        Returns:
        Hyperbolic sine.
      • arc_tan

        @Contract(pure=true)
        @NotNull
        public @NotNull Number arc_tan()
        arc tangent
        Specified by:
        arc_tan in interface Number
        Returns:
        arc tangent
      • arc_tan

        @Contract(pure=true)
        @NotNull
        public @NotNull Number arc_tan​(@NotNull
                                       @NotNull Number Half_Circle)
        arc tangent
        Specified by:
        arc_tan in interface Number
        Parameters:
        Half_Circle - value for a half circle
        Returns:
        arctan (x) ÷ π × Half_Circle
      • arc_tan_hyp

        @Contract(pure=true)
        @NotNull
        public @NotNull Number arc_tan_hyp()
        area hyperbolic tangent: loge ((1 + x) ÷ (1 - x)) / 2
        Specified by:
        arc_tan_hyp in interface Number
        Returns:
        Hyperbolic sine.
      • b

        @NotNull
        public @NotNull BCDInteger b()

        Fraktur represented as «a b/c»

        Returns:
        b
      • c

        @NotNull
        public @NotNull BCDInteger c()

        Fraktur represented as «a b/c» or «d/c»

        Returns:
        c
      • compareTo

        public int compareTo​(@NotNull
                             @NotNull Number rightValue)
        Specified by:
        compareTo in interface Comparable<Number>
        Specified by:
        compareTo in interface Number
        Parameters:
        rightValue - value to compare with
        Returns:
        Compare_Equal
        Values are the same
        Compare_Less
        Left value less the right value
        Compare_Greater
        Left value greater the right value
        See Also:
        Comparable.compareTo(Object)
      • cos

        @Contract(pure=true)
        @NotNull
        public @NotNull Number cos()
        cos (x)
        Specified by:
        cos in interface Number
        Returns:
        cos (x)
      • cos

        @Contract(pure=true)
        @NotNull
        public @NotNull Number cos​(@NotNull
                                   @NotNull Number Half_Circle)
        cosine
        Specified by:
        cos in interface Number
        Parameters:
        Half_Circle - value for a half circle
        Returns:
        sin (x × π ÷ Half_Circle)
      • cos_hyp

        @Contract(pure=true)
        @NotNull
        public @NotNull Number cos_hyp()
        Hyperbolic cosine: (Exponent^x + Exponent^-x)/2
        Specified by:
        cos_hyp in interface Number
        Returns:
        Hyperbolic cosine.
      • d

        @NotNull
        public @NotNull BCDInteger d()

        Fraktur represented as «d/c».

        Returns:
        d
      • equals

        public boolean equals​(@NotNull
                              @NotNull Object rightValue)
        Specified by:
        equals in interface Number
        Overrides:
        equals in class Object
        Parameters:
        rightValue - right value
        Returns:
        true when the values are equal
      • exp_10

        @Contract(pure=true)
        @NotNull
        public @NotNull Number exp_10()
                               throws BCDError
        10x
        Specified by:
        exp_10 in interface Number
        Returns:
        10x
        Throws:
        BCDError - calculation error
      • exp_e

        @Contract(pure=true)
        @NotNull
        public @NotNull Number exp_e()
        ex
        Specified by:
        exp_e in interface Number
        Returns:
        ex
      • hashCode

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

        @Contract(pure=true)
        @NotNull
        public @NotNull Number log_10()
        log10 (x)
        Specified by:
        log_10 in interface Number
        Returns:
        log10 (x)
      • log_e

        @Contract(pure=true)
        @NotNull
        public @NotNull Number log_e()
        loge (x)
        Specified by:
        log_e in interface Number
        Returns:
        loge (x)
      • neg

        @Contract(pure=true)
        @NotNull
        public @NotNull Number neg()
        Specified by:
        neg in interface Number
        Returns:
        negative value
      • not

        @Contract(pure=true)
        @NotNull
        public @NotNull Number not()

        Logical not

        Specified by:
        not in interface Number
        Returns:
        ¬ x
      • or

        @Contract(pure=true)
        @NotNull
        public @NotNull Number or​(@NotNull
                                  @NotNull Number y)

        Logical or

        Specified by:
        or in interface Number
        Parameters:
        y - right value
        Returns:
        x ∨ y
      • root

        @Contract(pure=true)
        @NotNull
        public @NotNull Number root​(@NotNull
                                    @NotNull Number r)
        r√x
        Specified by:
        root in interface Number
        Parameters:
        r - root
        Returns:
        e(loge x ÷ r)
      • sin

        @Contract(pure=true)
        @NotNull
        public @NotNull Number sin()
        sine
        Specified by:
        sin in interface Number
        Returns:
        sin (x)
      • sin

        @Contract(pure=true)
        @NotNull
        public @NotNull Number sin​(@NotNull
                                   @NotNull Number Half_Circle)
        sine
        Specified by:
        sin in interface Number
        Parameters:
        Half_Circle - value for a half circle
        Returns:
        sin (x × π ÷ Half_Circle)
      • sin_hyp

        @Contract(pure=true)
        @NotNull
        public @NotNull Number sin_hyp()
        hyperbolic sine: (ex - e-x) ÷ 2
        Specified by:
        sin_hyp in interface Number
        Returns:
        Hyperbolic sine.
      • square

        @Contract(pure=true)
        @NotNull
        public @NotNull Number square()
        x2
        Specified by:
        square in interface Number
        Returns:
        x2
      • square_root

        @Contract(pure=true)
        @NotNull
        public @NotNull Number square_root()
        2√x
        Specified by:
        square_root in interface Number
        Returns:
        2√x
      • tan

        @Contract(pure=true)
        @NotNull
        public @NotNull Number tan()
        tan x
        Specified by:
        tan in interface Number
        Returns:
        tan (x × π ÷ Half_Circle)
      • tan

        @Contract(pure=true)
        @NotNull
        public @NotNull Number tan​(@NotNull
                                   @NotNull Number Half_Circle)
        tangent
        Specified by:
        tan in interface Number
        Parameters:
        Half_Circle - value for a half circle
        Returns:
        tangent
      • tan_hyp

        @NotNull
        public @NotNull Number tan_hyp()
        Hyperbolic tangent: (e2x - 1) ÷ (e2x + 1)
        Specified by:
        tan_hyp in interface Number
        Returns:
        Hyperbolic tangent.
      • xor

        @Contract(pure=true)
        @NotNull
        public @NotNull Number xor​(@NotNull
                                   @NotNull Number y)

        Logical xor

        Specified by:
        xor in interface Number
        Returns:
        x ⊻ y