Лучший способ представить фракцию в Java?



Я пытаюсь работать с фракции в Java.



Я хочу реализовать арифметические функции. Для этого мне сначала потребуется способ нормализации функций. Я знаю, что не могу добавить 1/6 и 1/2, пока у меня нет общего знаменателя. Мне придется добавить 1/6 и 3/6. Наивный подход мог бы меня добавить 2/12 и 6/12, а затем уменьшить. Как я могу достичь общего знаменателя с наименьшей производительности? Какой алгоритм лучше всего подходит это?





версия 8 (благодаря hstoerr):




улучшения включают в себя:




  • метод equals() теперь совместим с методом compareTo ()




final class Fraction extends Number {
private int numerator;
private int denominator;

public Fraction(int numerator, int denominator) {
if(denominator == 0) {
throw new IllegalArgumentException("denominator is zero");
}
if(denominator < 0) {
numerator *= -1;
denominator *= -1;
}
this.numerator = numerator;
this.denominator = denominator;
}

public Fraction(int numerator) {
this.numerator = numerator;
this.denominator = 1;
}

public int getNumerator() {
return this.numerator;
}

public int getDenominator() {
return this.denominator;
}

public byte byteValue() {
return (byte) this.doubleValue();
}

public double doubleValue() {
return ((double) numerator)/((double) denominator);
}

public float floatValue() {
return (float) this.doubleValue();
}

public int intValue() {
return (int) this.doubleValue();
}

public long longValue() {
return (long) this.doubleValue();
}

public short shortValue() {
return (short) this.doubleValue();
}

public boolean equals(Fraction frac) {
return this.compareTo(frac) == 0;
}

public int compareTo(Fraction frac) {
long t = this.getNumerator() * frac.getDenominator();
long f = frac.getNumerator() * this.getDenominator();
int result = 0;
if(t>f) {
result = 1;
}
else if(f>t) {
result = -1;
}
return result;
}
}




Я удалил все предыдущие версии. Моя благодарность:




  • Дейв Рей

  • Клетус

  • duffymo

  • Джеймс

  • Милхауза

  • Оскар Рейес

  • Jason S

  • Франсиско Каньедо

  • Вне Закона Программист

  • Бешка

508   0  

Comments

    Ничего не найдено.