From 76afd54d3c7f05f1dddac59dccd71f98943f250a Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 23 Dec 2020 15:19:33 -0700 Subject: [PATCH] use epsilon for numeric equals --- .../parser/lang/operations/statements/EqualsStatement.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/common/src/main/java/com/dfsek/terra/api/structures/parser/lang/operations/statements/EqualsStatement.java b/common/src/main/java/com/dfsek/terra/api/structures/parser/lang/operations/statements/EqualsStatement.java index ebc8ae515..b7dface16 100644 --- a/common/src/main/java/com/dfsek/terra/api/structures/parser/lang/operations/statements/EqualsStatement.java +++ b/common/src/main/java/com/dfsek/terra/api/structures/parser/lang/operations/statements/EqualsStatement.java @@ -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 { + private static final double EPSILON = 0.000000001D; + public EqualsStatement(Returnable left, Returnable 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); }