@Override public UnitConverter concatenate(UnitConverter converter) { if (converter instanceof RationalConverter) { RationalConverter that = (RationalConverter) converter; long dividendLong = this._dividend * that._dividend; long divisorLong = this._divisor * that._divisor; double dividendDouble = ((double)this._dividend) * that._dividend; double divisorDouble = ((double)this._divisor) * that._divisor; if ((dividendLong != dividendDouble) || (divisorLong != divisorDouble)) { // Long overflows. return new MultiplyConverter(dividendDouble / divisorDouble); } long gcd = gcd(dividendLong, divisorLong); return RationalConverter.valueOf(dividendLong / gcd, divisorLong / gcd); } else if (converter instanceof MultiplyConverter) { return converter.concatenate(this); } else { return super.concatenate(converter); } }
@Override public UnitConverter concatenate(UnitConverter converter) { if (converter instanceof RationalConverter) { RationalConverter that = (RationalConverter) converter; long dividendLong = this._dividend * that._dividend; long divisorLong = this._divisor * that._divisor; double dividendDouble = ((double)this._dividend) * that._dividend; double divisorDouble = ((double)this._divisor) * that._divisor; if ((dividendLong != dividendDouble) || (divisorLong != divisorDouble)) { // Long overflows. return new MultiplyConverter(dividendDouble / divisorDouble); } long gcd = gcd(dividendLong, divisorLong); return RationalConverter.valueOf(dividendLong / gcd, divisorLong / gcd); } else if (converter instanceof MultiplyConverter) { return converter.concatenate(this); } else { return super.concatenate(converter); } }
@Override public UnitConverter concatenate(UnitConverter converter) { if (converter instanceof RationalConverter) { RationalConverter that = (RationalConverter) converter; long dividendLong = this._dividend * that._dividend; long divisorLong = this._divisor * that._divisor; double dividendDouble = ((double)this._dividend) * that._dividend; double divisorDouble = ((double)this._divisor) * that._divisor; if ((dividendLong != dividendDouble) || (divisorLong != divisorDouble)) { // Long overflows. return new MultiplyConverter(dividendDouble / divisorDouble); } long gcd = gcd(dividendLong, divisorLong); return RationalConverter.valueOf(dividendLong / gcd, divisorLong / gcd); } else if (converter instanceof MultiplyConverter) { return converter.concatenate(this); } else { return super.concatenate(converter); } }