1
0
mirror of https://github.com/DanilaFe/abacus synced 2024-06-17 00:17:07 -07:00
Abacus/src/main/java/org/nwapw/abacus/number/NumberInterface.java

120 lines
3.0 KiB
Java
Raw Normal View History

package org.nwapw.abacus.number;
2017-07-25 22:47:48 -07:00
/**
* An interface used to represent a number.
*/
public interface NumberInterface {
2017-07-25 22:47:48 -07:00
/**
* The maximum precision to which this number operates.
2017-07-30 21:11:32 -07:00
*
2017-07-25 22:47:48 -07:00
* @return the precision.
*/
int getMaxPrecision();
2017-07-25 22:47:48 -07:00
/**
* Multiplies this number by another, returning
* a new number instance.
2017-07-30 21:11:32 -07:00
*
2017-07-25 22:47:48 -07:00
* @param multiplier the multiplier
* @return the result of the multiplication.
*/
NumberInterface multiply(NumberInterface multiplier);
2017-07-30 21:11:32 -07:00
2017-07-25 22:47:48 -07:00
/**
* Divides this number by another, returning
* a new number instance.
2017-07-30 21:11:32 -07:00
*
2017-07-25 22:47:48 -07:00
* @param divisor the divisor
* @return the result of the division.
*/
NumberInterface divide(NumberInterface divisor);
2017-07-30 21:11:32 -07:00
2017-07-25 22:47:48 -07:00
/**
* Adds this number to another, returning
* a new number instance.
2017-07-30 21:11:32 -07:00
*
2017-07-25 22:47:48 -07:00
* @param summand the summand
* @return the result of the summation.
*/
NumberInterface add(NumberInterface summand);
2017-07-30 21:11:32 -07:00
2017-07-25 22:47:48 -07:00
/**
* Subtracts another number from this number,
* a new number instance.
2017-07-30 21:11:32 -07:00
*
2017-07-25 22:47:48 -07:00
* @param subtrahend the subtrahend.
* @return the result of the subtraction.
*/
NumberInterface subtract(NumberInterface subtrahend);
2017-07-25 22:47:48 -07:00
/**
* Returns a new instance of this number with
* the sign flipped.
2017-07-30 21:11:32 -07:00
*
2017-07-25 22:47:48 -07:00
* @return the new instance.
*/
NumberInterface negate();
2017-07-25 22:47:48 -07:00
/**
* Raises this number to an integer power.
2017-07-30 21:11:32 -07:00
*
2017-07-26 19:28:57 -07:00
* @param exponent the exponent to which to take the number.
* @return the resulting value.
2017-07-25 22:47:48 -07:00
*/
NumberInterface intPow(int exponent);
2017-07-25 22:47:48 -07:00
/**
* Compares this number to another.
2017-07-30 21:11:32 -07:00
*
2017-07-25 22:47:48 -07:00
* @param number the number to compare to.
* @return same as Integer.compare();
*/
int compareTo(NumberInterface number);
2017-07-25 22:47:48 -07:00
/**
* Same as Math.signum().
2017-07-30 21:11:32 -07:00
*
2017-07-25 22:47:48 -07:00
* @return 1 if this number is positive, -1 if this number is negative, 0 if this number is 0.
*/
int signum();
/**
* Returns the least integer greater than or equal to the number.
2017-08-04 13:20:57 -07:00
*
* @return the least integer >= the number, if int can hold the value.
*/
NumberInterface ceiling();
/**
* Return the greatest integer less than or equal to the number.
2017-08-04 13:20:57 -07:00
*
* @return the greatest int >= the number, if int can hold the value.
*/
NumberInterface floor();
/**
* Returns the fractional part of the number.
2017-08-04 13:20:57 -07:00
*
* @return the fractional part of the number.
*/
NumberInterface fractionalPart();
/**
* Returns the integer representation of this number, discarding any fractional part,
* if int can hold the value.
2017-08-04 13:20:57 -07:00
*
* @return
*/
int intValue();
2017-07-25 22:47:48 -07:00
/**
* Promotes this class to another number class.
2017-07-30 21:11:32 -07:00
*
2017-07-25 22:47:48 -07:00
* @param toClass the class to promote to.
* @return the resulting new instance.
*/
NumberInterface promoteTo(Class<? extends NumberInterface> toClass);
}