Class BCDInteger

    • Field Detail

      • INTEGER_VALUES_CAN_NOT_USE_LOGARITHMIC_FUNCTIONS

        private static final String INTEGER_VALUES_CAN_NOT_USE_LOGARITHMIC_FUNCTIONS
        See Also:
        Constant Field Values
      • INTEGER_VALUES_CAN_NOT_USE_TRIGONOMETRIC_FUNCTIONS

        private static final String INTEGER_VALUES_CAN_NOT_USE_TRIGONOMETRIC_FUNCTIONS
        See Also:
        Constant Field Values
      • Logger

        private static final Logger Logger

        Class logger instance.

      • Null_Digits

        private static final byte[] Null_Digits

        No digits

      • TAG

        private static final String TAG

        Class logger tag.

      • Num_10

        public static final BCDInteger Num_10
        10
      • Digits

        private byte[] Digits
        number: sum(i = 0 ... Num_Digits-1; Digits[i]*10^i)
      • Last_Remainder

        @Nullable
        private @Nullable BCDInteger Last_Remainder
        remainder of last long division
      • Last_Remainder_Short

        private byte Last_Remainder_Short
        remainder of last short division
      • Negative

        private boolean Negative
        sign
      • Num_Digits

        private int Num_Digits
        number of digits
    • Constructor Detail

      • BCDInteger

        public BCDInteger()
        new Number, val = 0, length = 0
      • BCDInteger

        public BCDInteger​(@NotNull
                          @NotNull BCDInteger Value)
        new Number from existing number
        Parameters:
        Value - value to copy
      • BCDInteger

        public BCDInteger​(byte @NotNull [] Digits,
                          boolean Negative)
        new Number from attributes.
      • BCDInteger

        public BCDInteger​(@NotNull
                          @NotNull CharSequence s)
        new Number, val and length from string
        Parameters:
        s - string to extract number from
      • BCDInteger

        public BCDInteger​(int n)
        new Number, val = 0, length = n
        Parameters:
        n - digits for new number
      • BCDInteger

        public BCDInteger​(long value)
        new Number, val = 0, length = n
        Parameters:
        value - to init the integer from
    • Method Detail

      • $div

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

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

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

        @Contract(pure=true)
        @NotNull
        public @NotNull Number $times​(@NotNull
                                      @NotNull Number y)
        signed multiplication
        Specified by:
        $times in interface Number
        Parameters:
        y - Multipicator
        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 - right value
        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 integer - 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)
        signed compare
        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
      • Compare_Unsigned

        int Compare_Unsigned​(@NotNull
                             @NotNull BCDInteger Value)
        unsigned (absolute) compare
        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:
        allways 0
        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:
        0
      • 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 Number!

        Specified by:
        Integer in interface Number
        Returns:
        a clone
      • Is_Finite

        public boolean Is_Finite()
        current value is a normal number
        Specified by:
        Is_Finite in interface Number
        Returns:
        true as all intergers are finite
      • Is_Infinite

        public boolean Is_Infinite()
        current value is Infinity.
        Specified by:
        Is_Infinite in interface Number
        Returns:
        false since all integer are finite
      • Is_Integer

        public boolean Is_Integer()
        Current value is integer value.
        Specified by:
        Is_Integer in interface Number
        Returns:
        true since all integers are – well – integers
      • Is_NaN

        public boolean Is_NaN()
        current value is not a number
        Specified by:
        Is_NaN in interface Number
        Returns:
        false since all integers are numbers
      • 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 final boolean Is_Zero()
        value is 0
        Specified by:
        Is_Zero in interface Number
        Returns:
        true when x is 0
      • Last_Remainder

        @Nullable
        @Nullable BCDInteger Last_Remainder()
      • Normalize

        public void Normalize()
        Normalize (remove leading zero digits)
        Specified by:
        Normalize in interface Number
      • Num_Digits

        public int Num_Digits()
        returns number of digits
        Specified by:
        Num_Digits in interface Number
        Returns:
        Num_Digits
      • P_To_X

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

        @NotNull
        @NotNull BCDInteger Shift_Left​(int n)
        shift left by n digits (= divide by 10n)
        Parameters:
        n - digits to shift
        Returns:
        x ÷ 10n
      • Shift_Right

        @NotNull
        @NotNull BCDInteger Shift_Right​(int n)
        shift right by n digits (= multiply by 10n)
        Parameters:
        n - digits to shift
        Returns:
        x × 10n
      • 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! Actualy it just returns (int)To_Long ()

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

        public long To_Long()
        Description copied from interface: Number
        Convert to long integer

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

        Specified by:
        To_Long in interface Number
        Returns:
        return mantissa as long integer.
      • abs

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

        @NotNull
        private @NotNull BCDInteger addUnsigned​(@NotNull
                                                @NotNull BCDInteger a)
        unsigned (absolute) addition
        Parameters:
        a - right value
        Returns:
        abs (x) + abs (y)
      • addUnsigned

        @NotNull
        @NotNull BCDInteger addUnsigned​(int y)
        unsigned (absolute) addition of one digit
        Parameters:
        y - right value
        Returns:
        abs (x) - abs (y)
      • 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.
      • 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.
      • divUnsigned

        @NotNull
        private @NotNull BCDInteger divUnsigned​(@NotNull
                                                @NotNull BCDInteger Right)
        predicate: Num_Digits > v.numDigits, v = v.Normalize(), v.numDigits > 1
        Parameters:
        Right - right value
        Returns:
        abs(x) ÷ abs(y)
      • divUnsigned

        @NotNull
        private @NotNull BCDInteger divUnsigned​(int y)
        predicate: Num_Digits > v.numDigits, v = v.Normalize(), v.numDigits > 1
        Parameters:
        y - right value
        Returns:
        abs(x) ÷ abs(y)
      • 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
      • gcd

        @NotNull
        public @NotNull BCDInteger gcd​(@NotNull
                                       @NotNull BCDInteger y)
        <>calculate the greatest common denominator using the Euclidean algorithm
        Parameters:
        y - second value
        Returns:
        gcd
      • 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)
      • mid

        @NotNull
        private @NotNull BCDInteger mid​(int start,
                                        int len)
        get part of number
        Parameters:
        start - extract from
        len - extract length
        Returns:
        digits from start to start + len
      • mulUnsigned

        @NotNull
        private @NotNull BCDInteger mulUnsigned​(@NotNull
                                                @NotNull BCDInteger y)
        unsigned (absolute) multiplication
        Parameters:
        y - right value
        Returns:
        abs (x) × abs (y)
      • mulUnsigned

        @NotNull
        private @NotNull BCDInteger mulUnsigned​(int y)
        unsigned (absolute) multiplication by one digit
        Parameters:
        y - right value
        Returns:
        abs (x) × abs (y)
      • 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()
        Specified by:
        square in interface Number
        Returns:
      • square_root

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

        @NotNull
        private @NotNull BCDInteger subUnsigned​(@NotNull
                                                @NotNull BCDInteger y)

        unsigned (absolute) subtraction

        predicate: this > a (or this < a if Num_Digits == a.numDigits and underflow in most significant digit is allowed)
        Parameters:
        y - right value
        Returns:
        abs (x) - abs (y)
      • 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