1
0
mirror of https://github.com/DanilaFe/abacus synced 2024-12-23 07:50:09 -08:00
This commit is contained in:
Mitchell 2017-07-25 11:15:09 -07:00
commit 8efee48642
3 changed files with 30 additions and 8 deletions

View File

@ -7,7 +7,6 @@ public class FunctionDatabase {
private HashMap<String, Function> functions; private HashMap<String, Function> functions;
private void registerDefault(){ private void registerDefault(){
functions.put("+", new Function() { functions.put("+", new Function() {
@Override @Override
protected boolean matchesParams(Number[] params) { protected boolean matchesParams(Number[] params) {
@ -63,6 +62,25 @@ public class FunctionDatabase {
return params[0].divide(params[1]); return params[0].divide(params[1]);
} }
}); });
functions.put("!", new Function() {
@Override
protected boolean matchesParams(Number[] params) {
return params.length == 1;
}
@Override
protected Number applyInternal(Number[] params) {
Number factorial = params[0];
Number multiplier = params[0];
//It is necessary to later prevent calls of factorial on anything but non-negative integers.
while(multiplier.signum() == 1){
multiplier = multiplier.subtract(NaiveNumber.ONE.promoteTo(multiplier.getClass()));
factorial = factorial.multiply(multiplier);
}
return factorial;
}
});
} }
public FunctionDatabase(){ public FunctionDatabase(){

13
src/org/nwapw/abacus/number/NaiveNumber.java Normal file → Executable file
View File

@ -8,6 +8,9 @@ public class NaiveNumber implements Number {
this.value = value; this.value = value;
} }
static final NaiveNumber ZERO = new NaiveNumber(0);
static final NaiveNumber ONE = new NaiveNumber(1);
@Override @Override
public int precision() { public int precision() {
return 4; return 4;
@ -39,13 +42,14 @@ public class NaiveNumber implements Number {
} }
@Override @Override
public Number zero() { public int compareTo(Number number) {
return new NaiveNumber(0); NaiveNumber num = (NaiveNumber) number;
return Double.compare(value, num.value);
} }
@Override @Override
public Number one() { public int signum() {
return new NaiveNumber(1); return this.compareTo(ZERO);
} }
@Override @Override
@ -53,5 +57,6 @@ public class NaiveNumber implements Number {
if(toClass == this.getClass()) return this; if(toClass == this.getClass()) return this;
return null; return null;
} }
} }

View File

@ -8,9 +8,8 @@ public interface Number {
Number add(Number summand); Number add(Number summand);
Number subtract(Number subtrahend); Number subtract(Number subtrahend);
Number negate(); Number negate();
int compareTo(Number number);
Number zero(); int signum();
Number one();
Number promoteTo(Class<? extends Number> toClass); Number promoteTo(Class<? extends Number> toClass);