use of org.tensorics.core.units.Unit in project tensorics-core by tensorics.
the class JScienceQuantificationStrategy method asSameUnit.
@Override
public <S extends ErronousValue<T> & Quantified> OperandPair<T, Unit> asSameUnit(S left, S right) {
if (left.unit().equals(right.unit())) {
return OperandPair.ofLeftRightUnit(left, right, left.unit());
} else {
final Unit standardUnitOfLeft = standardUnitOf(left);
final Unit standardUnitOfRight = standardUnitOf(right);
if (!standardUnitOfLeft.equals(standardUnitOfRight)) {
throw new IllegalArgumentException("Units '" + standardUnitOfLeft + "' and '" + standardUnitOfRight + "' are not consistent or convertible");
}
return OperandPair.ofLeftRightUnit(toStandardUnit(left), toStandardUnit(right), standardUnitOfLeft);
}
}
use of org.tensorics.core.units.Unit in project tensorics-core by tensorics.
the class JScienceQuantificationStrategy method toStandardUnit.
private <S extends ErronousValue<T> & Quantified> ErronousValue<T> toStandardUnit(S scalar) {
Unit unit = scalar.unit();
throwIfNotJScience(unit);
UnitConverter converter = extract(unit).toStandardUnit();
return convert(converter, scalar);
}
use of org.tensorics.core.units.Unit in project tensorics-core by tensorics.
the class JScienceQuantificationStrategy method standardUnitOf.
private <S extends Quantified> Unit standardUnitOf(S scalar) {
Unit unit = scalar.unit();
throwIfNotJScience(unit);
return JScienceUnit.of(((JScienceUnit) unit).getUnit().getStandardUnit());
}
use of org.tensorics.core.units.Unit in project tensorics-core by tensorics.
the class QuantityDivision method perform.
@Override
public QuantifiedValue<S> perform(QuantifiedValue<S> left, QuantifiedValue<S> right) {
S value = operation().perform(left.value(), right.value());
Unit unit = environment().quantification().divide(left.unit(), right.unit());
return Tensorics.quantityOf(value, unit).withValidity(validityFor(left, right)).withError(productError(left, right));
}
use of org.tensorics.core.units.Unit in project tensorics-core by tensorics.
the class QuantitySumOrDifferenceOperation method perform.
@Override
public QuantifiedValue<S> perform(QuantifiedValue<S> left, QuantifiedValue<S> right) {
OperandPair<S, Unit> pair = environment().quantification().asSameUnit(left, right);
Optional<S> error = environment().errorPropagation().errorForSumAndDifference(pair.left(), pair.right());
S value = operation().perform(pair.left().value(), pair.right().value());
boolean validity = validityFor(left, right);
Unit unit = pair.unit();
return Tensorics.quantityOf(value, unit).withError(error).withValidity(validity);
}
Aggregations