package tc.oc.pgm.utils;
/**
* A modifier for numeric properties, with constant and linear terms.
*/
public class NumericModifier {
private final double constant;
private final double linear;
public NumericModifier(double constant, double linear) {
this.constant = constant;
this.linear = linear;
}
public NumericModifier(double constant) {
this(constant, 0);
}
public static final NumericModifier ZERO = new NumericModifier(0);
public double getConstant() {
return constant;
}
public double getLinear() {
return linear;
}
public double apply(double x) {
return constant + linear * x;
}
public double credit(double x, double scale) {
return x + scale * apply(x);
}
public double credit(double x) {
return credit(x, 1d);
}
public double deduct(double x, double scale) {
return credit(x, -scale);
}
public double deduct(double x) {
return deduct(x, 1d);
}
@Override
public String toString() {
return getClass().getSimpleName() + "{constant=" + constant + " linear=" + linear + "}";
}
}