# Class Apint

java.lang.Object
java.lang.Number
org.apfloat.Apcomplex
org.apfloat.Apfloat
org.apfloat.Aprational
org.apfloat.Apint

All Implemented Interfaces:
  `Serializable, Comparable<Apfloat>, Formattable`

public class Apint extends Aprational
Arbitrary precision integer class.

In addition to the constructors, it is possible to create an apint from an apfloat or aprational via the methods that round these numbers to an integer value: `Apfloat.floor()`, `Apfloat.ceil()`, and `Apfloat.truncate()`.

Version:
  1.15.0
Author:
  Mikko Tommila
See Also:
  - `ApintMath`
  - Serialized Form

- ## Field Summary

  ### Fields inherited from class Apcomplex

  `DEFAULT, I, INFINITE, ONE, REAL_ABS_IMAG_ORDER, REAL_IMAG_ORDER, ZERO`

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `Apint()`
  Default constructor.
  ``
  `Apint(long value)`
  Constructs an apfloat from the specified `long`.
  ``
  `Apint(long value, int radix)`
  Constructs an apfloat from the specified `long` and radix.
  ``
  `Apint(PushbackReader in)`
  Reads an apint from a stream using the default radix.
  ``
  `Apint(PushbackReader in, int radix)`
  Reads an apint from a stream using the specified radix.
  ``
  `Apint(String value)`
  Constructs an apfloat from the specified string.
  ``
  `Apint(String value, int radix)`
  Constructs an apfloat from the specified string and radix.
  ``
  `Apint(BigInteger value)`
  Constructs an apint from a `BigInteger`.
  ``
  `Apint(BigInteger value, int radix)`
  Constructs an apint from a `BigInteger` using the specified radix.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Apint`
  `add(Apint x)`
  Adds two apints.
  `Apint`
  `ceil()`
  Ceiling function.
  `int`
  `compareTo(Apfloat x)`
  Compare this apint to the specified apfloat.
  `int`
  `compareTo(Apint x)`
  Compare this apint to the specified apint.
  `int`
  `compareTo(Aprational x)`
  Compare this apint to the specified aprational.
  `Apint`
  `denominator()`
  Denominator of this aprational.
  `Apint`
  `divide(Apint x)`
  Divides two apints.
  `boolean`
  `equals(Object obj)`
  Compares this object to the specified object.
  `Apint`
  `floor()`
  Floor function.
  `void`
  `formatTo(Formatter formatter, int flags, int width, int precision)`
  Formats the object using the provided formatter.
  `Apint`
  `frac()`
  Returns the fractional part.
  `protected ApfloatImpl`
  `getImpl(long precision)`
  Returns an `ApfloatImpl` representing this apint up to the requested precision.
  `int`
  `hashCode()`
  Returns a hash code for this apint.
  `boolean`
  `isInteger()`
  Returns if this number has an integer value.
  `boolean`
  `isShort()`
  Returns if this apint is "short".
  `Apint`
  `mod(Apint x)`
  Calculates the remainder when divided by an apint.
  `Apint`
  `multiply(Apint x)`
  Multiplies two apints.
  `Apint`
  `negate()`
  Negative value.
  `Apint`
  `numerator()`
  Numerator of this aprational.
  `int`
  `radix()`
  Radix of this apint.
  `long`
  `scale()`
  Returns the scale of this apint.
  `int`
  `signum()`
  Returns the signum function of this apint.
  `long`
  `size()`
  Returns the size of this apint.
  `Apint`
  `subtract(Apint x)`
  Subtracts two apints.
  `boolean`
  `test(Apfloat x)`
  Tests two apfloat numbers for equality.
  `boolean`
  `test(Apint x)`
  Tests two apint numbers for equality.
  `boolean`
  `test(Aprational x)`
  Tests two aprational numbers for equality.
  `BigInteger`
  `toBigInteger()`
  Converts this apint to Java's `BigInteger`.
  `Apint`
  `toRadix(int radix)`
  Convert this apint to the specified radix.
  `String`
  `toString(boolean pretty)`
  Returns a string representation of this aprational.
  `Apint`
  `truncate()`
  Truncates fractional part.
  `void`
  `writeTo(Writer out, boolean pretty)`
  Write a string representation of this aprational to a `Writer`.

  ### Methods inherited from class Aprational

  `add, divide, mod, multiply, precision, preferCompare, subtract, toString, writeTo`

  ### Methods inherited from class Apfloat

  `add, byteValue, divide, doubleValue, equalDigits, floatValue, imag, intValue, longValue, longValueExact, mod, multiply, precision, real, shortValue, subtract`

  ### Methods inherited from class Apcomplex

  `add, byteValueExact, conj, divide, equalDigits, intValueExact, isZero, multiply, shortValueExact, subtract, test`

  ### Methods inherited from class Object

  `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- ## Constructor Details

  - ### Apint

    protected Apint()
    Default constructor. To be used only by subclasses that overload all needed methods.

  - ### Apint

    public Apint(String value) throws NumberFormatException, ApfloatRuntimeException
    Constructs an apfloat from the specified string. The default radix will be used.

    Parameters:
      `value` - The string representing the number.
    Throws:
      `NumberFormatException` - In case the number is invalid.
      `ApfloatRuntimeException`

  - ### Apint

    public Apint(String value, int radix) throws NumberFormatException, ApfloatRuntimeException
    Constructs an apfloat from the specified string and radix.
    Parameters:
      `value` - The string representing the number.
      `radix` - The radix of the number.
    Throws:
      `NumberFormatException` - In case the number is invalid.
      `ApfloatRuntimeException`

  - ### Apint

    public Apint(long value) throws NumberFormatException, ApfloatRuntimeException
    Constructs an apfloat from the specified `long`. The default radix will be used.
    Parameters:
      `value` - The value of the number.
    Throws:
      `NumberFormatException` - In case the number is invalid.
      `ApfloatRuntimeException`

  - ### Apint

    public Apint(long value, int radix) throws NumberFormatException, ApfloatRuntimeException
    Constructs an apfloat from the specified `long` and radix.
    Parameters:
      `value` - The value of the number.
      `radix` - The radix of the number.
    Throws:
      `NumberFormatException` - In case the number is invalid.
      `ApfloatRuntimeException`

  - ### Apint

    public Apint(PushbackReader in) throws IOException, NumberFormatException, ApfloatRuntimeException
    Reads an apint from a stream using the default radix.
    Parameters:
      `in` - The stream to read from
    Throws:
      `IOException` - If an I/O error occurs accessing the stream.
      `NumberFormatException` - If the number is not valid.
      `ApfloatRuntimeException`

  - ### Apint

    public Apint(PushbackReader in, int radix) throws IOException, NumberFormatException, ApfloatRuntimeException
    Reads an apint from a stream using the specified radix.
    Parameters:
      `in` - The stream to read from
      `radix` - The radix of the number.
    Throws:
      `IOException` - If an I/O error occurs accessing the stream.
      `NumberFormatException` - If the number is not valid.
      `ApfloatRuntimeException`

  - ### Apint

    public Apint(BigInteger value) throws NumberFormatException, ApfloatRuntimeException
    Constructs an apint from a `BigInteger`. The default radix is used.
    Parameters:
      `value` - The value of the number.
    Throws:
      `NumberFormatException` - If the default radix is not valid.
      `ApfloatRuntimeException`

  - ### Apint

    public Apint(BigInteger value, int radix) throws NumberFormatException, ApfloatRuntimeException
    Constructs an apint from a `BigInteger` using the specified radix.
    Parameters:
      `value` - The value of the number.
      `radix` - The radix of the number.
    Throws:
      `NumberFormatException` - If the radix is not valid.
      `ApfloatRuntimeException`

- ## Method Details

  - ### numerator

    public Apint numerator()
    Numerator of this aprational.
    Overrides:
      `numerator` in class `Aprational`
    Returns:
      `this`.

  - ### denominator

    public Apint denominator()
    Denominator of this aprational.
    Overrides:
      `denominator` in class `Aprational`
    Returns:
      `Apcomplex.ONE`.

  - ### radix

    public int radix()
    Radix of this apint.
    Overrides:
      `radix` in class `Aprational`
    Returns:
      Radix of this apint.

  - ### scale

    public long scale() throws ApfloatRuntimeException
    Returns the scale of this apint. Scale is equal to the number of digits in an apint.

    Zero has a scale of `-INFINITE`.

    Overrides:
      `scale` in class `Aprational`
    Returns:
      Number of digits in this apint in the radix in which it's presented.
    Throws:
      `ApfloatRuntimeException`
    See Also:
      - `Apfloat.scale()`

  - ### size

    public long size() throws ApfloatRuntimeException
    Returns the size of this apint. Size is equal to the number of significant digits in the number, excluding any trailing zeros.

    Zero has a size of `0`.

    Overrides:
      `size` in class `Aprational`
    Returns:
      Number of significant digits in this number, excluding trailing zeros, in the radix in which it's presented.
    Throws:
      `ApfloatRuntimeException`
    Since:
      1.6
    See Also:
      - `Apfloat.size()`

  - ### signum

    public int signum()
    Returns the signum function of this apint.
    Overrides:
      `signum` in class `Aprational`
    Returns:
      -1, 0 or 1 as the value of this apint is negative, zero or positive.

  - ### isShort

    public boolean isShort() throws ApfloatRuntimeException
    Returns if this apint is "short".
    Overrides:
      `isShort` in class `Aprational`
    Returns:
      `true` if the apint is "short", `false` if not.
    Throws:
      `ApfloatRuntimeException`
    See Also:
      - `Apfloat.isShort()`

  - ### isInteger

    public boolean isInteger() throws ApfloatRuntimeException
    Returns if this number has an integer value.

    For `Apint` this method always returns `true`.

    Overrides:
      `isInteger` in class `Aprational`
    Returns:
      `true`.
    Throws:
      `ApfloatRuntimeException`
    Since:
      1.9.0

  - ### negate

    public Apint negate() throws ApfloatRuntimeException
    Negative value.
    Overrides:
      `negate` in class `Aprational`
    Returns:
      `-this`.
    Throws:
      `ApfloatRuntimeException`
    Since:
      1.1

  - ### add

    public Apint add(Apint x) throws ApfloatRuntimeException
    Adds two apints.
    Parameters:
      `x` - The number to be added to this number.
    Returns:
      `this + x`.
    Throws:
      `ApfloatRuntimeException`

  - ### subtract

    public Apint subtract(Apint x) throws ApfloatRuntimeException
    Subtracts two apints.
    Parameters:
      `x` - The number to be subtracted from this number.
    Returns:
      `this - x`.
    Throws:
      `ApfloatRuntimeException`

  - ### multiply

    public Apint multiply(Apint x) throws ApfloatRuntimeException
    Multiplies two apints.
    Parameters:
      `x` - The number to be multiplied by this number.
    Returns:
      `this * x`.
    Throws:
      `ApfloatRuntimeException`

  - ### divide

    public Apint divide(Apint x) throws ArithmeticException, ApfloatRuntimeException
    Divides two apints.
    Parameters:
      `x` - The number by which this number is to be divided.
    Returns:
      `this / x`.
    Throws:
      `ArithmeticException` - In case the divisor is zero.
      `ApfloatRuntimeException`

  - ### mod

    public Apint mod(Apint x) throws ApfloatRuntimeException
    Calculates the remainder when divided by an apint. The result has the same sign as this number. If `x` is zero, then zero is returned.
    Parameters:
      `x` - The number that is used as the divisor in the remainder calculation.
    Returns:
      `this % x`.
    Throws:
      `ApfloatRuntimeException`
    See Also:
      - `ApfloatMath.fmod(Apfloat,Apfloat)`

  - ### floor

    public Apint floor()
    Floor function. Returns the largest (closest to positive infinity) value that is not greater than this apfloat and is equal to a mathematical integer.
    Overrides:
      `floor` in class `Aprational`
    Returns:
      This apint.

  - ### ceil

    public Apint ceil()
    Ceiling function. Returns the smallest (closest to negative infinity) value that is not less than this apfloat and is equal to a mathematical integer.
    Overrides:
      `ceil` in class `Aprational`
    Returns:
      This apint.

  - ### truncate

    public Apint truncate()
    Truncates fractional part.
    Overrides:
      `truncate` in class `Aprational`
    Returns:
      This apint.

  - ### frac

    public Apint frac() throws ApfloatRuntimeException
    Returns the fractional part.
    Overrides:
      `frac` in class `Aprational`
    Returns:
      Always zero.
    Throws:
      `ApfloatRuntimeException`
    Since:
      1.7.0

  - ### toBigInteger

    public BigInteger toBigInteger() throws IllegalArgumentException
    Converts this apint to Java's `BigInteger`. This method can be greatly faster than converting to String and then to BigInteger.
    Returns:
      This apint converted to a `BigInteger`.
    Throws:
      `IllegalArgumentException` - If this number is too big to fit in a `BigInteger`.
    Since:
      1.6

  - ### toRadix

    public Apint toRadix(int radix) throws NumberFormatException, ApfloatRuntimeException
    Convert this apint to the specified radix.
    Overrides:
      `toRadix` in class `Aprational`
    Parameters:
      `radix` - The radix.
    Returns:
      This number in the specified radix.
    Throws:
      `NumberFormatException` - If the radix is invalid.
      `ApfloatRuntimeException`
    Since:
      1.2

  - ### compareTo

    public int compareTo(Apint x)
    Compare this apint to the specified apint.

    Parameters:
      `x` - Apint to which this apint is to be compared.
    Returns:
      -1, 0 or 1 as this apint is numerically less than, equal to, or greater than `x`.

  - ### compareTo

    public int compareTo(Aprational x)
    Compare this apint to the specified aprational.

    Overrides:
      `compareTo` in class `Aprational`
    Parameters:
      `x` - Aprational to which this apint is to be compared.
    Returns:
      -1, 0 or 1 as this apint is numerically less than, equal to, or greater than `x`.

  - ### compareTo

    public int compareTo(Apfloat x)
    Compare this apint to the specified apfloat.

    Specified by:
      `compareTo` in interface `Comparable<Apfloat>`
    Overrides:
      `compareTo` in class `Aprational`
    Parameters:
      `x` - Apfloat to which this apint is to be compared.
    Returns:
      -1, 0 or 1 as this apint is numerically less than, equal to, or greater than `x`.

  - ### equals

    public boolean equals(Object obj)
    Compares this object to the specified object.

    Note: if two apfloats are compared where one number doesn't have enough precise digits, the mantissa is assumed to contain zeros. See `Apfloat.compareTo(Apfloat)`.

    Overrides:
      `equals` in class `Aprational`
    Parameters:
      `obj` - The object to compare with.
    Returns:
      `true` if the objects are the same; `false` otherwise.

  - ### test

    public boolean test(Apint x)
    Tests two apint numbers for equality. Returns `false` if the numbers are definitely known to be not equal. If `true` is returned, equality is unknown and should be verified by calling `equals(Object)`. This method is usually significantly faster than calling `equals(Object)`.
    Parameters:
      `x` - The number to test against.
    Returns:
      `false` if the numbers are definitely not equal, `true` if unknown.
    Since:
      1.10.0

  - ### test

    public boolean test(Aprational x)
    Description copied from class: `Aprational`
    Tests two aprational numbers for equality. Returns `false` if the numbers are definitely known to be not equal. If `true` is returned, equality is unknown and should be verified by calling `Aprational.equals(Object)`. This method is usually significantly faster than calling `equals(Object)`.
    Overrides:
      `test` in class `Aprational`
    Parameters:
      `x` - The number to test against.
    Returns:
      `false` if the numbers are definitely not equal, `true` if unknown.

  - ### test

    public boolean test(Apfloat x)
    Description copied from class: `Apfloat`
    Tests two apfloat numbers for equality. Returns `false` if the numbers are definitely known to be not equal. If `true` is returned, equality is unknown and should be verified by calling `Apfloat.equals(Object)`. This method is usually significantly faster than calling `equals(Object)`.
    Overrides:
      `test` in class `Aprational`
    Parameters:
      `x` - The number to test against.
    Returns:
      `false` if the numbers are definitely not equal, `true` if unknown.

  - ### hashCode

    public int hashCode()
    Returns a hash code for this apint.
    Overrides:
      `hashCode` in class `Aprational`
    Returns:
      The hash code value for this object.

  - ### toString

    public String toString(boolean pretty) throws ApfloatRuntimeException
    Returns a string representation of this aprational.
    Overrides:
      `toString` in class `Aprational`
    Parameters:
      `pretty` - `true` to use a fixed-point notation, `false` to use an exponential notation.
    Returns:
      A string representing this object.
    Throws:
      `ApfloatRuntimeException`

  - ### writeTo

    public void writeTo(Writer out, boolean pretty) throws IOException, ApfloatRuntimeException
    Write a string representation of this aprational to a `Writer`.
    Overrides:
      `writeTo` in class `Aprational`
    Parameters:
      `out` - The output `Writer`.
      `pretty` - `true` to use a fixed-point notation, `false` to use an exponential notation.
    Throws:
      `IOException` - In case of I/O error writing to the stream.
      `ApfloatRuntimeException`

  - ### formatTo

    public void formatTo(Formatter formatter, int flags, int width, int precision)
    Description copied from class: `Aprational`
    Formats the object using the provided formatter.
    Specified by:
      `formatTo` in interface `Formattable`
    Overrides:
      `formatTo` in class `Aprational`
    Parameters:
      `formatter` - The formatter.
      `flags` - The flags to modify the output format.
      `width` - The minimum number of characters to be written to the output, or `-1` for no minimum.
      `precision` - The maximum number of characters to be written to the output, or `-1` for no maximum.
    See Also:
      - `Apfloat.formatTo(Formatter,int,int,int)`

  - ### getImpl

    protected ApfloatImpl getImpl(long precision) throws ApfloatRuntimeException
    Returns an `ApfloatImpl` representing this apint up to the requested precision.
    Overrides:
      `getImpl` in class `Aprational`
    Parameters:
      `precision` - Precision of the `ApfloatImpl` that is needed.
    Returns:
      An `ApfloatImpl` representing this object to the requested precision.
    Throws:
      `ApfloatRuntimeException`