1
0
mirror of https://github.com/DanilaFe/abacus synced 2026-01-15 19:35:20 +00:00

Revert "Remove the NumberInterface::intPow method."

0c16bb4e9b
This commit is contained in:
2017-08-05 18:22:43 -07:00
parent 4f94700aef
commit bae6ee5526
4 changed files with 57 additions and 4 deletions

View File

@@ -66,6 +66,23 @@ public class NaiveNumber extends NumberInterface {
return new NaiveNumber(-value);
}
@Override
public NumberInterface intPowInternal(int exponent) {
if (exponent == 0) {
return NaiveNumber.ONE;
}
boolean takeReciprocal = exponent < 0;
exponent = Math.abs(exponent);
NumberInterface power = this;
for (int currentExponent = 1; currentExponent < exponent; currentExponent++) {
power = power.multiply(this);
}
if (takeReciprocal) {
power = NaiveNumber.ONE.divide(power);
}
return power;
}
@Override
public int compareTo(NumberInterface number) {
NaiveNumber num = (NaiveNumber) number;

View File

@@ -134,6 +134,27 @@ public abstract class NumberInterface {
return negateInternal();
}
/**
* Raises this number to an integer power.
*
* @param exponent the exponent to which to take the number.
* @return the resulting value.
*/
protected abstract NumberInterface intPowInternal(int exponent);
/**
* Raises this number to an integer power. Also, checks if the
* thread has been interrupted, and if so, throws
* an exception.
*
* @param exponent the exponent to which to take the number.
* @return the resulting value.
*/
public final NumberInterface intPow(int exponent){
checkInterrupted();
return intPowInternal(exponent);
}
/**
* Compares this number to another.
*

View File

@@ -71,6 +71,23 @@ public class PreciseNumber extends NumberInterface {
return new PreciseNumber(value.subtract(((PreciseNumber) subtrahend).value));
}
@Override
public NumberInterface intPowInternal(int exponent) {
if (exponent == 0) {
return PreciseNumber.ONE;
}
boolean takeReciprocal = exponent < 0;
exponent = Math.abs(exponent);
NumberInterface power = this;
for (int currentExponent = 1; currentExponent < exponent; currentExponent++) {
power = power.multiply(this);
}
if (takeReciprocal) {
power = PreciseNumber.ONE.divide(power);
}
return power;
}
@Override
public int compareTo(NumberInterface number) {
return value.compareTo(((PreciseNumber) number).value);