List of usage examples for org.apache.commons.math3.fraction BigFraction divide
public BigFraction divide(final BigFraction fraction)
Divide the value of this fraction by another, returning the result in reduced form.
From source file:com.netflix.imfutility.util.ConversionHelper.java
/** * Converts the given number of edit units in old edit rate to a new edit rate. * It can be used to convert audio samples to video frames. * * @param eu edit units number in oldUnitsInSec edit rate * @param oldUnitsInSec old edit rate specifying the current edit units * @param newUnitsInSec new edit rate/*from w ww . j a v a2 s . co m*/ * @return edit units number in newUnitsInSec edit rate. */ public static long toNewEditRate(BigInteger eu, BigFraction oldUnitsInSec, BigFraction newUnitsInSec) { BigFraction editUnits = new BigFraction(eu); return editUnits.divide(oldUnitsInSec).multiply(newUnitsInSec).longValue(); }
From source file:com.netflix.imfutility.util.ConversionHelper.java
/** * Converts the edit untis to milliseconds according to the given edit rate. * * @param eu edit units number// w w w . j a va 2 s .c o m * @param unitsInSec edit rate * @return milliseconds */ public static long editUnitToMilliSeconds(BigInteger eu, BigFraction unitsInSec) { BigFraction editUnits = new BigFraction(eu); return editUnits.divide(unitsInSec).multiply(1000).longValue(); }
From source file:com.netflix.imfutility.util.ConversionHelper.java
/** * Converts the edit untis to seconds according to the given edit rate. * * @param eu edit units number//w w w . j a va2s . com * @param unitsInSec edit rate * @return seconds */ public static long toSeconds(BigInteger eu, BigFraction unitsInSec) { BigFraction editUnits = new BigFraction(eu); return editUnits.divide(unitsInSec).longValue(); }
From source file:com.netflix.imfutility.util.ConversionHelper.java
/** * Transforms edit units to a timecode according to the given edit unit rate. * <ul>//from w ww.j a va 2 s . c o m * <li>An example of edit units is a frame.</li> * <li>The output timecode has the following format 'hh:mm:ss.xxx', where xxx is milliseconds.</li> * </ul> * * @param eu edit units to be transformed * @param unitsInSec edit unit rate * @return timecode as a string in "hh:mm:ss.mss" format. */ public static String editUnitToTimecode(BigInteger eu, BigFraction unitsInSec) { BigFraction editUnits = new BigFraction(eu); BigFraction unitsInMin = unitsInSec.multiply(new BigFraction(60)); BigFraction unitsInHour = unitsInSec.multiply(new BigFraction(60 * 60)); int hours = editUnits.divide(unitsInHour).intValue(); int minutes = editUnits.subtract(unitsInHour.multiply(hours)).divide(unitsInMin).intValue(); int seconds = editUnits.subtract(unitsInHour.multiply(hours)).subtract(unitsInMin.multiply(minutes)) .divide(unitsInSec).intValue(); BigFraction units = editUnits.subtract(unitsInHour.multiply(hours)).subtract(unitsInMin.multiply(minutes)) .subtract(unitsInSec.multiply(seconds)); int milliseconds = new BigFraction(1000).divide(unitsInSec).multiply(units).intValue(); return String.format("%02d:%02d:%02d.%03d", hours, minutes, seconds, milliseconds); }
From source file:gedi.util.math.stat.distributions.OccupancyNumberDistribution.java
private static final BigFraction rationalv(int a, int b, int k, int n) { BigFraction re = BigFraction.ONE; for (int i = n; i > n - a * b; i--) re = re.multiply(new BigFraction(i, 1)); BigFraction ba = new BigFraction(1, 1); for (int i = 1; i <= b; i++) ba = ba.multiply(new BigFraction(i, 1)); re = re.divide(a == 0 ? BigFraction.ONE : ba.pow(a)); BigFraction f1 = a * b == 0 ? BigFraction.ONE : new BigFraction(1, k).pow(a * b); BigFraction f2 = n - a * b == 0 ? BigFraction.ONE : new BigFraction(k - a, k).pow(n - a * b); return re.multiply(f1).multiply(f2); }
From source file:com.netflix.imfutility.util.ConversionHelper.java
/** * Transforms milliseconds to an SMPTE timecode according to the given edit unit rate. * <ul>/*from www.j a v a2 s .co m*/ * <li>An example of edit units is a frame.</li> * <li>The output timecode has the following format 'hh:mm:ss:ff'.</li> * </ul> * * @param milliseconds milliseconds to be transformed * @param unitsInSec edit unit rate * @return timecode as a string in "hh:mm:ss:ff" format. */ public static String msToSmpteTimecode(long milliseconds, BigFraction unitsInSec) { BigFraction ms = new BigFraction(milliseconds); BigFraction msInMin = new BigFraction(60 * 1000); BigFraction msInHour = new BigFraction(60 * 60 * 1000); BigFraction msInSec = new BigFraction(1000); BigFraction unitsInMs = unitsInSec.divide(msInSec); int hours = ms.divide(msInHour).intValue(); int minutes = ms.subtract(msInHour.multiply(hours)).divide(msInMin).intValue(); int seconds = ms.subtract(msInHour.multiply(hours)).subtract(msInMin.multiply(minutes)).divide(msInSec) .intValue(); int units = ms.subtract(msInHour.multiply(hours)).subtract(msInMin.multiply(minutes)) .subtract(msInSec.multiply(seconds)).multiply(unitsInMs).intValue(); return String.format("%02d:%02d:%02d:%02d", hours, minutes, seconds, units); }
From source file:cc.redberry.core.number.Rational.java
@Override public Rational divide(BigFraction fraction) { NumberUtils.checkNotNull(fraction);// w w w. j a v a2s. co m return new Rational(fraction.divide(fraction)); }
From source file:model.LP.java
/** * Find a leaving variable index that is the most * bounding on the given entering variable index. * * @param entering/*ww w .j a v a 2 s.co m*/ * an entering variable index. * @param dual * If true, find a leaving variable index for the dual dictionary. * Otherwise, find one for the primal dictionary. * @return * A leaving variable index. */ private int leaving(int entering, boolean dual) { FieldVector<BigFraction> check; FieldVector<BigFraction> sd; FieldMatrix<BigFraction> bin = new FieldLUDecomposition<BigFraction>(B_).getSolver().getInverse() .multiply(N_); if (dual) { check = c_; FieldVector<BigFraction> unit = new ArrayFieldVector<BigFraction>(bin.getRowDimension(), BigFraction.ZERO); unit.setEntry(entering, BigFraction.ONE); sd = bin.transpose().scalarMultiply(BigFraction.MINUS_ONE).operate(unit); } else { check = b_; FieldVector<BigFraction> unit = new ArrayFieldVector<BigFraction>(bin.getColumnDimension(), BigFraction.ZERO); unit.setEntry(entering, BigFraction.ONE); sd = bin.operate(unit); } boolean unbounded = true; int index = -1; /* Check for unboundedness and find first non-zero element in check */ for (int i = 0; i < sd.getDimension(); i++) { if (!check.getEntry(i).equals(BigFraction.ZERO) && index == -1) { index = i; } if (sd.getEntry(i).compareTo(BigFraction.ZERO) > 0) { unbounded = false; } } String e = "Program is unbounded."; if (unbounded) throw new RuntimeException(e); /* Set temporarily max value as ratio of the first divisible pair. */ BigFraction max = sd.getEntry(index).divide(check.getEntry(index)); for (int i = 0; i < sd.getDimension(); i++) { BigFraction num = sd.getEntry(i); BigFraction denom = check.getEntry(i); if (!denom.equals(BigFraction.ZERO)) { BigFraction val = num.divide(denom); if (val.compareTo(max) > 0) { max = val; index = i; } } else { if (num.compareTo(BigFraction.ZERO) > 0) return i; } } return index; }
From source file:sadl.models.PDFA.java
protected boolean fixProbability(int state) { List<Transition> outgoingTransitions = getOutTransitions(state, true); final double sum = outgoingTransitions.stream().mapToDouble(t -> t.getProbability()).sum(); // divide every probability by the sum of probabilities s.t. they sum up to 1 if (!Precision.equals(sum, 1)) { logger.debug("Sum of transition probabilities for state {} is {}", state, sum); outgoingTransitions = getOutTransitions(state, true); outgoingTransitions.forEach(t -> changeTransitionProbability(t, t.getProbability() / sum)); outgoingTransitions = getOutTransitions(state, true); final double newSum = outgoingTransitions.stream().mapToDouble(t -> t.getProbability()).sum(); logger.debug("Corrected sum of transition probabilities is {}", newSum); if (!Precision.equals(newSum, 1.0)) { logger.debug("Probabilities do not sum up to one, so doing it again with the Fraction class"); final List<BigFraction> probabilities = new ArrayList<>(outgoingTransitions.size()); for (int i = 0; i < outgoingTransitions.size(); i++) { probabilities.add(i, new BigFraction(outgoingTransitions.get(i).getProbability())); }/* w w w . j a v a 2 s . c om*/ BigFraction fracSum = BigFraction.ZERO; for (final BigFraction f : probabilities) { try { fracSum = fracSum.add(f); } catch (final MathArithmeticException e) { logger.error("Arithmetic Exception for fracSum={}, FractionToAdd={}", fracSum, f, e); throw e; } } for (int i = 0; i < outgoingTransitions.size(); i++) { changeTransitionProbability(outgoingTransitions.get(i), probabilities.get(i).divide(fracSum).doubleValue()); // outgoingTransitions.get(i).setProbability(probabilities.get(i).divide(fracSum).doubleValue()); } final double tempSum = getOutTransitions(state, true).stream().mapToDouble(t -> t.getProbability()) .sum(); if (!Precision.equals(tempSum, 1.0)) { BigFraction preciseSum = BigFraction.ZERO; for (final BigFraction f : probabilities) { preciseSum = preciseSum.add(f.divide(fracSum)); } if (!preciseSum.equals(BigFraction.ONE)) { throw new IllegalStateException( "Probabilities do not sum up to one, but instead to " + tempSum); } else { logger.warn( "Probabilities do not sum up to one, but instead to {}. This is due to double underflows, but they sum up to one if using BigFraction. This small error will be ignored.", tempSum); } } } } return true; }