@Override public double evalEnergy(Value[] values) { // Allow one constant input FiniteFieldNumber result = (FiniteFieldNumber) values[0].getObject(); Object arg1 = values[1].getObject(); FiniteFieldNumber input1 = (arg1 instanceof FiniteFieldNumber) ? (FiniteFieldNumber) arg1 : result.cloneWithNewValue(FactorFunctionUtilities.toInteger(arg1)); Object arg2 = values[2].getObject(); FiniteFieldNumber input2 = (arg2 instanceof FiniteFieldNumber) ? (FiniteFieldNumber) arg2 : result.cloneWithNewValue(FactorFunctionUtilities.toInteger(arg2)); if (!result.isCompatible(input1) || !result.isCompatible(input2)) throw new DimpleException("Primitive polynomials must match."); FiniteFieldNumber computedResult = finiteFieldProduct(input1, input2); return (computedResult.isEqual(result)) ? 0 : Double.POSITIVE_INFINITY; }
@Override public final double evalEnergy(Value[] arguments) { // Allow one constant input final FiniteFieldNumber result = requireNonNull((FiniteFieldNumber) arguments[0].getObject()); final Value arg1 = arguments[1]; final FiniteFieldNumber input1 = (arg1 instanceof FiniteFieldValue) ? arg1.getFiniteField() : result.cloneWithNewValue(arg1.getInt()); final Value arg2 = arguments[2]; final FiniteFieldNumber input2 = (arg2 instanceof FiniteFieldValue) ? arg2.getFiniteField() : result.cloneWithNewValue(arg2.getInt()); if (!result.isCompatible(input1) || !result.isCompatible(input2)) throw new DimpleException("Primitive polynomials must match."); final FiniteFieldNumber computedResult = finiteFieldProduct(input1, input2); return (computedResult.isEqual(result)) ? 0 : Double.POSITIVE_INFINITY; }