mirror of
https://github.com/DanilaFe/abacus
synced 2024-11-17 16:09:32 -08:00
parent
4226df72f5
commit
fee9f091fd
1
build.gradle
Executable file → Normal file
1
build.gradle
Executable file → Normal file
|
@ -11,7 +11,6 @@ repositories {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compile group: 'org.apache.commons', name: 'commons-math3', version: '3.6.1'
|
|
||||||
compile 'com.moandjiezana.toml:toml4j:0.7.1'
|
compile 'com.moandjiezana.toml:toml4j:0.7.1'
|
||||||
compile "org.jetbrains.kotlin:kotlin-stdlib-jre8"
|
compile "org.jetbrains.kotlin:kotlin-stdlib-jre8"
|
||||||
testCompile 'junit:junit:4.12'
|
testCompile 'junit:junit:4.12'
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package org.nwapw.abacus.number;
|
package org.nwapw.abacus.number;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.BigInteger;
|
|
||||||
import java.math.MathContext;
|
import java.math.MathContext;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -62,15 +61,6 @@ public class PreciseNumber extends NumberInterface {
|
||||||
this.value = value;
|
this.value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a precise number from the given BigInteger.
|
|
||||||
*
|
|
||||||
* @param value a BigInteger object representing the value of the number.
|
|
||||||
*/
|
|
||||||
public PreciseNumber(BigInteger value) {
|
|
||||||
this.value = new BigDecimal(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMaxPrecision() {
|
public int getMaxPrecision() {
|
||||||
return internalContext.getPrecision();
|
return internalContext.getPrecision();
|
||||||
|
|
|
@ -1,115 +0,0 @@
|
||||||
package org.nwapw.abacus.number;
|
|
||||||
|
|
||||||
import org.apache.commons.math3.fraction.BigFraction;
|
|
||||||
import org.apache.commons.math3.fraction.Fraction;
|
|
||||||
|
|
||||||
import java.math.BigInteger;
|
|
||||||
|
|
||||||
public class RationalNumber extends NumberInterface{
|
|
||||||
|
|
||||||
static final RationalNumber ONE = new RationalNumber(BigFraction.ONE);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The value of the number.
|
|
||||||
*/
|
|
||||||
private BigFraction value;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs a new instance with the given value.
|
|
||||||
* @param value
|
|
||||||
*/
|
|
||||||
public RationalNumber(BigFraction value){
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMaxPrecision() {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected NumberInterface multiplyInternal(NumberInterface multiplier) {
|
|
||||||
return new RationalNumber(value.multiply(((RationalNumber)multiplier).value));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected NumberInterface divideInternal(NumberInterface divisor) {
|
|
||||||
return new RationalNumber(value.divide(((RationalNumber)divisor).value));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected NumberInterface addInternal(NumberInterface summand) {
|
|
||||||
return new RationalNumber(value.add(((RationalNumber)summand).value));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected NumberInterface subtractInternal(NumberInterface subtrahend) {
|
|
||||||
return new RationalNumber(value.subtract(((RationalNumber)subtrahend).value));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected NumberInterface negateInternal() {
|
|
||||||
return new RationalNumber(value.negate());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected NumberInterface intPowInternal(int exponent) {
|
|
||||||
return new RationalNumber(value.pow(exponent));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int compareTo(NumberInterface number) {
|
|
||||||
return value.compareTo(((RationalNumber)number).value);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int signum() {
|
|
||||||
return value.getNumerator().signum();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected NumberInterface ceilingInternal() {
|
|
||||||
if(value.getNumeratorAsInt() != 1){
|
|
||||||
return floorInternal().add(ONE);
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected NumberInterface floorInternal() {
|
|
||||||
BigInteger floor = value.bigDecimalValue().toBigInteger();
|
|
||||||
if(value.compareTo(BigFraction.ZERO) < 0 && value.getDenominatorAsInt() != 1){
|
|
||||||
floor = floor.subtract(BigInteger.ONE);
|
|
||||||
}
|
|
||||||
return new RationalNumber(new BigFraction(floor));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected NumberInterface fractionalPartInternal() {
|
|
||||||
return this.subtractInternal(floorInternal());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int intValue() {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected NumberInterface promoteToInternal(Class<? extends NumberInterface> toClass) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public NumberInterface getMaxError() {
|
|
||||||
return toPreciseNumber().getMaxError();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString(){
|
|
||||||
return toPreciseNumber().toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
PreciseNumber toPreciseNumber(){
|
|
||||||
return (PreciseNumber) new PreciseNumber(value.getNumerator()).divideInternal(new PreciseNumber(value.getDenominator()));
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user