use epsilon for numeric equals

This commit is contained in:
dfsek
2020-12-23 15:19:33 -07:00
parent 7fe7dac57a
commit 76afd54d3c

View File

@@ -3,14 +3,21 @@ package com.dfsek.terra.api.structures.parser.lang.operations.statements;
import com.dfsek.terra.api.structures.parser.lang.Returnable;
import com.dfsek.terra.api.structures.parser.lang.operations.BinaryOperation;
import com.dfsek.terra.api.structures.tokenizer.Position;
import net.jafama.FastMath;
public class EqualsStatement extends BinaryOperation<Object, Boolean> {
private static final double EPSILON = 0.000000001D;
public EqualsStatement(Returnable<Object> left, Returnable<Object> right, Position position) {
super(left, right, position);
}
@Override
public Boolean apply(Object left, Object right) {
if(left instanceof Number && right instanceof Number) {
return FastMath.abs(((Number) left).doubleValue() - ((Number) right).doubleValue()) <= EPSILON;
}
return left.equals(right);
}