Example usage for org.apache.commons.math3.fraction BigFraction divide

List of usage examples for org.apache.commons.math3.fraction BigFraction divide

Introduction

In this page you can find the example usage for org.apache.commons.math3.fraction BigFraction divide.

Prototype

public BigFraction divide(final BigFraction fraction) 

Source Link

Document

Divide the value of this fraction by another, returning the result in reduced form.

Usage

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;
}