package de.invesdwin.util.math.decimal.stream; import javax.annotation.concurrent.NotThreadSafe; import de.invesdwin.util.assertions.Assertions; import de.invesdwin.util.math.decimal.ADecimal; @NotThreadSafe public class DecimalStreamNormalization<E extends ADecimal<E>> implements IDecimalStreamAlgorithm<E, E> { private final E min; private final E max; private final E maxMinusMin; public DecimalStreamNormalization(final E min, final E max) { Assertions.assertThat(min).isLessThanOrEqualTo(max); this.min = min; this.max = max; this.maxMinusMin = max.subtract(min); } public E getMin() { return min; } public E getMax() { return max; } /** * normalized(x) = (x-min(x))/(max(x)-min(x)) */ @Override public E process(final E value) { return value.subtract(min).divide(maxMinusMin); } }