Package gnu.math

Class IntNum

    • Field Detail

      • ival

        public int ival
        All integers are stored in 2's-complement form. If words == null, the ival is the value of this IntNum. Otherwise, the first ival elements of words make the value of this IntNum, stored in little-endian order, 2's-complement form.
      • words

        public int[] words
    • Constructor Detail

      • IntNum

        public IntNum()
      • IntNum

        public IntNum​(int value)
        Create a new (non-shared) IntNum, and initialize to an int.
        Parameters:
        value - the initial value
    • Method Detail

      • zero

        public static final IntNum zero()
      • one

        public static final IntNum one()
      • ten

        public static final IntNum ten()
      • minusOne

        public static IntNum minusOne()
        Return the IntNum for -1.
      • asIntNumOrNull

        public static IntNum asIntNumOrNull​(Object value)
      • alloc

        public static IntNum alloc​(int nwords)
        Allocate a new non-shared IntNum.
        Parameters:
        nwords - number of words to allocate
      • realloc

        public void realloc​(int nwords)
        Change words.length to nwords. We allow words.length to be upto nwords+2 without reallocating.
      • isNegative

        public final boolean isNegative()
        Specified by:
        isNegative in class RealNum
      • sign

        public int sign()
        Description copied from class: RealNum
        Return 1 if >0; 0 if ==0; -1 if <0; -2 if NaN.
        Specified by:
        sign in class RealNum
      • compare

        public static int compare​(IntNum x,
                                  IntNum y)
        Return -1, 0, or 1, depending on which value is greater.
      • compare

        public static int compare​(IntNum x,
                                  long y)
        Return -1, 0, or 1, depending on which value is greater.
      • compare

        public int compare​(Object obj)
        Description copied from class: Numeric
        Return an integer for which of this or obj is larger. Return 1 if this>obj; 0 if this==obj; -1 if this<obj; -2 if this!=obj otherwise (for example if either is NaN); -3 if not comparable (incompatible types).
        Overrides:
        compare in class Complex
      • isOdd

        public final boolean isOdd()
      • isZero

        public final boolean isZero()
        Overrides:
        isZero in class RatNum
      • isOne

        public final boolean isOne()
      • isMinusOne

        public final boolean isMinusOne()
      • wordsNeeded

        public static int wordsNeeded​(int[] words,
                                      int len)
        Calculate how many words are significant in words[0:len-1]. Returns the least value x such that x>0 && words[0:x-1]==words[0:len-1], when words is viewed as a 2's complement integer.
      • canonicalize

        public IntNum canonicalize()
      • add

        public static final IntNum add​(int x,
                                       int y)
        Add two ints, yielding an IntNum.
      • add

        public static IntNum add​(IntNum x,
                                 int y)
        Add an IntNum and an int, yielding a new IntNum.
      • setAdd

        public void setAdd​(IntNum x,
                           int y)
        Set this to the sum of x and y. OK if x==this.
      • setAdd

        public final void setAdd​(int y)
        Destructively add an int to this.
      • set

        public final void set​(int y)
        Destructively set the value of this to an int.
      • set

        public final void set​(long y)
        Destructively set the value of this to a long.
      • set

        public final void set​(int[] words,
                              int length)
        Destructively set the value of this to the given words. The words array is reused, not copied.
      • set

        public final void set​(IntNum y)
        Destructively set the value of this to that of y.
      • add

        public static IntNum add​(IntNum x,
                                 IntNum y)
        Add two IntNums, yielding their sum as another IntNum.
      • sub

        public static IntNum sub​(IntNum x,
                                 IntNum y)
        Subtract two IntNums, yielding their sum as another IntNum.
      • add

        public static IntNum add​(IntNum x,
                                 IntNum y,
                                 int k)
        Add two IntNums, yielding their sum as another IntNum.
      • times

        public static final IntNum times​(int x,
                                         int y)
        Multiply two ints, yielding an IntNum.
      • times

        public static final IntNum times​(IntNum x,
                                         int y)
      • divide

        public static void divide​(long x,
                                  long y,
                                  IntNum quotient,
                                  IntNum remainder,
                                  int rounding_mode)
      • divide

        public static void divide​(IntNum x,
                                  IntNum y,
                                  IntNum quotient,
                                  IntNum remainder,
                                  int rounding_mode)
        Divide two integers, yielding quotient and remainder.
        Parameters:
        x - the numerator in the division
        y - the denominator in the division
        quotient - is set to the quotient of the result (iff quotient!=null)
        remainder - is set to the remainder of the result (iff remainder!=null)
        rounding_mode - one of FLOOR, CEILING, TRUNCATE, or ROUND.
      • toExactInt

        public IntNum toExactInt​(int rounding_mode)
        Description copied from class: RealNum
        Converts to an exact integer, with specified rounding mode.
        Overrides:
        toExactInt in class RatNum
      • toInt

        public RealNum toInt​(int rounding_mode)
        Description copied from class: RealNum
        Converts a real to an integer, according to a specified rounding mode. Note an inexact argument gives an inexact result, following Scheme. See also toExactInt.
        Overrides:
        toInt in class RatNum
      • power

        public Numeric power​(IntNum y)
        Description copied from class: Numeric
        Return this raised to an integer power. Implemented by repeated squaring and multiplication. If y < 0, returns div_inv of the result.
        Overrides:
        power in class RatNum
      • power

        public static IntNum power​(IntNum x,
                                   int y)
        Calculate the integral power of an IntNum.
        Parameters:
        x - the value (base) to exponentiate
        y - the exponent (must be non-negative)
      • gcd

        public static final int gcd​(int a,
                                    int b)
        Calculate Greatest Common Divisor for non-negative ints.
      • shift

        public static IntNum shift​(IntNum x,
                                   int count)
      • format

        public void format​(int radix,
                           StringBuffer buffer)
      • format

        public void format​(int radix,
                           StringBuilder buffer)
      • intValue

        public static int intValue​(Object obj)
        Cast an Object to an int. The Object must (currently) be an IntNum.
      • hashCode

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

        public static boolean equals​(IntNum x,
                                     IntNum y)
      • make

        public static IntNum make​(int value)
        Return a (possibly-shared) IntNum with a given int value.
      • valueOfUnsigned

        public static IntNum valueOfUnsigned​(long value)
        Make an IntNum from an unsigned 64-bit value.
      • valueOfUnsigned

        public static IntNum valueOfUnsigned​(int value)
        Make an IntNum from an unsigned 32-bit value.
      • make

        public static IntNum make​(int[] words,
                                  int len)
        Make a canonicalized IntNum from an array of words. The array may be reused (without copying).
      • make

        public static IntNum make​(int[] words)
      • make

        public static IntNum make​(long value)
      • valueOf

        public static IntNum valueOf​(int value)
        Return a (possibly-shared) IntNum with a given int value.
      • valueOf

        public static IntNum valueOf​(long value)
        Return a (possibly-shared) IntNum with a given long value.
      • valueOf

        public static IntNum valueOf​(char[] buf,
                                     int offset,
                                     int length,
                                     int radix,
                                     boolean negative)
      • valueOf

        public static IntNum valueOf​(byte[] digits,
                                     int byte_len,
                                     boolean negative,
                                     int radix)
      • doubleValue

        public double doubleValue()
        Description copied from class: Quantity
        The value of the real component, as a double. This is relative to the unit().dims - i.e. unit()/doubleValue() is factored in.
        Overrides:
        doubleValue in class Quaternion
      • roundToDouble

        public double roundToDouble​(int exp,
                                    boolean neg,
                                    boolean remainder)
        Convert a semi-processed IntNum to double. Number must be non-negative. Multiplies by a power of two, applies sign, and converts to double, with the usual java rounding.
        Parameters:
        exp - power of two, positive or negative, by which to multiply
        neg - true if negative
        remainder - true if the IntNum is the result of a truncating division that had non-zero remainder. To ensure proper rounding in this case, the IntNum must have at least 54 bits.
      • getAbsolute

        public void getAbsolute​(int[] words)
        Copy the abolute value of this into an array of words. Assumes words.length >= (this.words == null ? 1 : this.ival). Result is zero-extended, but need not be a valid 2's complement number.
      • negate

        public static boolean negate​(int[] dest,
                                     int[] src,
                                     int len)
        Set dest[0:len-1] to the negation of src[0:len-1]. Return true if overflow (i.e. if src is -2**(32*len-1)). Ok for src==dest.
      • setNegative

        public void setNegative​(IntNum x)
        Destructively set this to the negative of x. It is OK if x==this.
      • setNegative

        public final void setNegative()
        Destructively negate this.
      • intLength

        public int intLength()
        Calculates ceiling(log2(this < 0 ? -this : this+1)). See Common Lisp: the Language, 2nd ed, p. 361.
      • inRange

        public boolean inRange​(long lo,
                               long hi)
        Is this integer both >= lo and <= hi?.
      • inIntRange

        public boolean inIntRange()
        Does this value fit in a signed 32-bit int?
      • inLongRange

        public boolean inLongRange()
        Does this value fit in a signed 64-bit long?