gnu.math

Class IntNum

Implemented Interfaces:
Comparable, Externalizable

public class IntNum
extends RatNum
implements Externalizable

A class for infinite-precision integers.

Field Summary

int
ival
All integers are stored in 2's-complement form.
int[]
words

Fields inherited from class gnu.math.Numeric

CEILING, FLOOR, ROUND, TRUNCATE

Constructor Summary

IntNum()
IntNum(int value)
Create a new (non-shared) IntNum, and initialize to an int.

Method Summary

static IntNum
abs(IntNum x)
Numeric
add(Object y, int k)
Return this + k * obj.
static IntNum
add(IntNum x, IntNum y)
Add two IntNums, yielding their sum as another IntNum.
static IntNum
add(IntNum x, IntNum y, int k)
Add two IntNums, yielding their sum as another IntNum.
static IntNum
add(IntNum x, int y)
Add an IntNum and an int, yielding a new IntNum.
static IntNum
add(int x, int y)
Add two ints, yielding an IntNum.
static IntNum
alloc(int nwords)
Allocate a new non-shared IntNum.
IntNum
canonicalize()
int
compare(Object obj)
Return 1 if this>obj; 0 if this==obj; -1 if this
static int
compare(IntNum x, IntNum y)
Return -1, 0, or 1, depending on which value is greater.
static int
compare(IntNum x, long y)
Return -1, 0, or 1, depending on which value is greater.
IntNum
denominator()
Numeric
div(Object y)
static void
divide(IntNum x, IntNum y, IntNum quotient, IntNum remainder, int rounding_mode)
Divide two integers, yielding quotient and remainder.
static void
divide(long x, long y, IntNum quotient, IntNum remainder, int rounding_mode)
double
doubleValue()
The value of the real component, as a double.
boolean
equals(Object obj)
static boolean
equals(IntNum x, IntNum y)
void
format(int radix, StringBuffer buffer)
static IntNum
gcd(IntNum x, IntNum y)
static int
gcd(int a, int b)
Calculate Greatest Common Divisor for non-negative ints.
void
getAbsolute(int[] words)
Copy the abolute value of this into an array of words.
int
hashCode()
int
intLength()
Calculates ceiling(log2(this < 0 ? -this : this+1)).
int
intValue()
static int
intValue(Object obj)
Cast an Object to an int.
boolean
isMinusOne()
boolean
isNegative()
boolean
isOdd()
boolean
isOne()
boolean
isZero()
static IntNum
lcm(IntNum x, IntNum y)
long
longValue()
static IntNum
make(int value)
Return a (possibly-shared) IntNum with a given int value.
static IntNum
make(int[] words)
static IntNum
make(int[] words, int len)
Make a canonicalized IntNum from an array of words.
static IntNum
make(long value)
Return a (possibly-shared) IntNum with a given long value.
static IntNum
makeU(long value)
Make an IntNum from an unsigned 64-bit value.
static IntNum
minusOne()
Return the IntNum for -1.
static IntNum
modulo(IntNum x, IntNum y)
Numeric
mul(Object y)
Numeric
neg()
static IntNum
neg(IntNum x)
static boolean
negate(int[] dest, int[] src, int len)
Set dest[0:len-1] to the negation of src[0:len-1].
IntNum
numerator()
static IntNum
one()
Numeric
power(IntNum y)
Return this raised to an integer power.
static IntNum
power(IntNum x, int y)
Calculate the integral power of an IntNum.
static IntNum
quotient(IntNum x, IntNum y)
static IntNum
quotient(IntNum x, IntNum y, int rounding_mode)
void
readExternal(ObjectInput in)
Object
readResolve()
void
realloc(int nwords)
Change words.length to nwords.
static IntNum
remainder(IntNum x, IntNum y)
double
roundToDouble(int exp, boolean neg, boolean remainder)
Convert a semi-processed IntNum to double.
void
set(IntNum y)
Destructively set the value of this to that of y.
void
set(int y)
Destructively set the value of this to an int.
void
set(int[] words, int length)
Destructively set the value of this to the given words.
void
set(long y)
Destructively set the value of this to a long.
void
setAdd(IntNum x, int y)
Set this to the sum of x and y.
void
setAdd(int y)
Destructively add an int to this.
void
setNegative()
Destructively negate this.
void
setNegative(IntNum x)
Destructively set this to the negative of x.
static IntNum
shift(IntNum x, int count)
int
sign()
Return 1 if >0; 0 if ==0; -1 if <0; -2 if NaN.
static IntNum
sub(IntNum x, IntNum y)
Subtract two IntNums, yielding their sum as another IntNum.
static IntNum
ten()
static IntNum
times(IntNum x, IntNum y)
static IntNum
times(IntNum x, int y)
static IntNum
times(int x, int y)
Multiply two ints, yielding an IntNum.
IntNum
toExactInt(int rounding_mode)
Converts to an exact integer, with specified rounding mode.
RealNum
toInt(int rounding_mode)
Converts a real to an integer, according to a specified rounding mode.
String
toString(int radix)
static IntNum
valueOf(String s)
static IntNum
valueOf(String s, int radix)
static IntNum
valueOf(byte[] digits, int byte_len, boolean negative, int radix)
static IntNum
valueOf(char[] buf, int offset, int length, int radix, boolean negative)
static int
wordsNeeded(int[] words, int len)
Calculate how many words are significant in words[0:len-1].
void
writeExternal(ObjectOutput out)
static IntNum
zero()

Methods inherited from class gnu.math.RatNum

add, compare, denominator, divide, equals, equals, infinity, isExact, isZero, make, numerator, power, rationalize, times, toExact, toExactInt, toInt

Methods inherited from class gnu.math.RealNum

abs, add, add, compareTo, div, divide, exp, im, isNegative, isZero, log, max, min, mul, re, rneg, sign, sin, sqrt, times, toExact, toExactInt, toExactInt, toExactInt, toInt, toInt, toScaledInt, toScaledInt, toScaledInt

Methods inherited from class gnu.math.Complex

abs, add, add, addReversed, angle, compare, compare, div, divReversed, divide, doubleImagValue, doubleRealValue, doubleValue, equals, equals, exp, imMinusOne, imOne, isExact, isZero, log, longValue, make, make, mul, mulReversed, neg, neg, number, polar, polar, power, sqrt, times, toString

Methods inherited from class gnu.math.Quantity

abs, add, add, addReversed, compare, compare, compareReversed, dimensions, div, divReversed, divide, doubleImagValue, doubleValue, im, imValue, make, make, make, mul, mulReversed, neg, number, re, reValue, times, toString, unit

Methods inherited from class gnu.math.Numeric

abs, add, add, addReversed, compare, compareReversed, div, divReversed, div_inv, equals, floatValue, geq, grt, intValue, isExact, isZero, longValue, mul, mulReversed, mul_ident, neg, power, sub, toString, toString

Field Details

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 Details

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 Details

abs

public static IntNum abs(IntNum x)

add

public Numeric add(Object y,
                   int k)
Return this + k * obj.
Overrides:
add in interface RealNum

add

public static IntNum add(IntNum x,
                         IntNum y)
Add 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.

add

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

add

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

alloc

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

canonicalize

public IntNum canonicalize()

compare

public int compare(Object obj)
Return 1 if this>obj; 0 if this==obj; -1 if this
Overrides:
compare in interface Complex

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.

denominator

public final IntNum denominator()
Overrides:
denominator in interface RatNum

div

public Numeric div(Object y)
Overrides:
div in interface RealNum

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.

divide

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

doubleValue

public double doubleValue()
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 interface Complex

equals

public boolean equals(Object obj)
Overrides:
equals in interface RatNum

equals

public static boolean equals(IntNum x,
                             IntNum y)

format

public void format(int radix,
                   StringBuffer buffer)

gcd

public static IntNum gcd(IntNum x,
                         IntNum y)

gcd

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

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.

hashCode

public int hashCode()

intLength

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

intValue

public int intValue()
Overrides:
intValue in interface Numeric

intValue

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

isMinusOne

public final boolean isMinusOne()

isNegative

public final boolean isNegative()
Overrides:
isNegative in interface RealNum

isOdd

public final boolean isOdd()

isOne

public final boolean isOne()

isZero

public final boolean isZero()
Overrides:
isZero in interface RatNum

lcm

public static IntNum lcm(IntNum x,
                         IntNum y)

longValue

public long longValue()
Overrides:
longValue in interface Complex

make

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

make

public static IntNum make(int[] words)

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(long value)
Return a (possibly-shared) IntNum with a given long value.

makeU

public static IntNum makeU(long value)
Make an IntNum from an unsigned 64-bit value.

minusOne

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

modulo

public static IntNum modulo(IntNum x,
                            IntNum y)

mul

public Numeric mul(Object y)
Overrides:
mul in interface RealNum

neg

public Numeric neg()
Overrides:
neg in interface Complex

neg

public static IntNum neg(IntNum x)

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.

numerator

public final IntNum numerator()
Overrides:
numerator in interface RatNum

one

public static final IntNum one()

power

public Numeric power(IntNum y)
Return this raised to an integer power. Implemented by repeated squaring and multiplication. If y <320, returns div_inv of the result.
Overrides:
power in interface 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)

quotient

public static IntNum quotient(IntNum x,
                              IntNum y)

quotient

public static IntNum quotient(IntNum x,
                              IntNum y,
                              int rounding_mode)

readExternal

public void readExternal(ObjectInput in)
            throws IOException,
                   ClassNotFoundException

readResolve

public Object readResolve()
            throws ObjectStreamException

realloc

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

remainder

public static IntNum remainder(IntNum x,
                               IntNum y)

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.

set

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

set

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

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(long y)
Destructively set the value of this to a long.

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.

setNegative

public final void setNegative()
Destructively negate this.

setNegative

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

shift

public static IntNum shift(IntNum x,
                           int count)

sign

public int sign()
Return 1 if >0; 0 if ==0; -1 if <0; -2 if NaN.
Overrides:
sign in interface RealNum

sub

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

ten

public static final IntNum ten()

times

public static final IntNum times(IntNum x,
                                 IntNum y)

times

public static final IntNum times(IntNum x,
                                 int y)

times

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

toExactInt

public IntNum toExactInt(int rounding_mode)
Converts to an exact integer, with specified rounding mode.
Overrides:
toExactInt in interface RatNum

toInt

public RealNum toInt(int rounding_mode)
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 interface RatNum

toString

public String toString(int radix)
Overrides:
toString in interface Complex

valueOf

public static IntNum valueOf(String s)
            throws NumberFormatException

valueOf

public static IntNum valueOf(String s,
                             int radix)
            throws NumberFormatException

valueOf

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

valueOf

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

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.

writeExternal

public void writeExternal(ObjectOutput out)
            throws IOException

zero

public static final IntNum zero()