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

Compare commits

...

1 Commits

Author SHA1 Message Date
Arthur Drobot
9192e671f4 Write a RationalNumber class. 2017-08-09 18:37:42 -07:00
3 changed files with 126 additions and 0 deletions

1
build.gradle Normal file → Executable file
View File

@@ -11,6 +11,7 @@ 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'

View File

@@ -1,6 +1,7 @@
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;
/** /**
@@ -61,6 +62,15 @@ 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();

View File

@@ -0,0 +1,115 @@
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()));
}
}