A class for infinite-precision integers.
add
public Numeric add(Object y,
int k)
Return this + k * obj.
- 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.
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
- 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.
divide
public static void divide(IntNum x,
IntNum y,
IntNum quotient,
IntNum remainder,
int rounding_mode)
Divide two integers, yielding quotient and remainder.
x
- the numerator in the divisiony
- the denominator in the divisionquotient
- 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.
- doubleValue in interface Complex
equals
public boolean equals(Object obj)
- equals in interface RatNum
format
public void format(int radix,
StringBuffer buffer)
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 static int intValue(Object obj)
Cast an Object to an int. The Object must (currently) be an IntNum.
isMinusOne
public final boolean isMinusOne()
isOdd
public final boolean isOdd()
isOne
public final boolean isOne()
isZero
public final boolean isZero()
- isZero in interface RatNum
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.
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.
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.
- power in interface RatNum
power
public static IntNum power(IntNum x,
int y)
Calculate the integral power of an IntNum.
x
- the value (base) to exponentiatey
- the exponent (must be non-negative)
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.
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.
exp
- power of two, positive or negative, by which to multiplyneg
- true if negativeremainder
- 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.
sign
public int sign()
Return 1 if >0; 0 if ==0; -1 if <0; -2 if NaN.
- 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(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.
- 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.
- toInt in interface RatNum
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()