adding entry to userguide explaining equals() vs eq() methods
diff --git a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/DocumentationExamplesTest.java b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/DocumentationExamplesTest.java
index 29cdf78..c04f37d 100644
--- a/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/DocumentationExamplesTest.java
+++ b/commons-geometry-euclidean/src/test/java/org/apache/commons/geometry/euclidean/DocumentationExamplesTest.java
@@ -37,6 +37,7 @@
 import org.apache.commons.geometry.euclidean.threed.Vector3D;
 import org.apache.commons.geometry.euclidean.threed.rotation.QuaternionRotation;
 import org.apache.commons.geometry.euclidean.threed.shapes.Parallelepiped;
+import org.apache.commons.geometry.euclidean.twod.AffineTransformMatrix2D;
 import org.apache.commons.geometry.euclidean.twod.Line;
 import org.apache.commons.geometry.euclidean.twod.LinecastPoint2D;
 import org.apache.commons.geometry.euclidean.twod.Polyline;
@@ -90,7 +91,7 @@
         // create a precision context with an epsilon (aka, tolerance) value of 1e-3
         DoublePrecisionContext precision = new EpsilonDoublePrecisionContext(1e-3);
 
-        // test for equality
+        // test for equality using the eq() method
         precision.eq(1.0009, 1.0); // true; difference is less than epsilon
         precision.eq(1.002, 1.0); // false; difference is greater than epsilon
 
@@ -107,6 +108,27 @@
     }
 
     @Test
+    public void testEqualsVsEqExample() {
+        DoublePrecisionContext precision = new EpsilonDoublePrecisionContext(1e-6);
+
+        Vector2D v1 = Vector2D.of(1, 1); // (1.0, 1.0)
+        Vector2D v2 = Vector2D.parse("(1, 1)"); // (1.0, 1.0)
+
+        Vector2D v3 = Vector2D.of(Math.sqrt(2), 0).transform(
+                AffineTransformMatrix2D.createRotation(0.25 * Math.PI)); // (1.0000000000000002, 1.0)
+
+        v1.equals(v2); // true - exactly equal
+        v1.equals(v3); // false - not exactly equal
+
+        v1.eq(v3, precision); // true - approximately equal according to the given precision context
+
+        // ---------------------
+        Assert.assertTrue(v1.equals(v2));
+        Assert.assertFalse(v1.equals(v3));
+        Assert.assertTrue(v1.eq(v3, precision));
+    }
+
+    @Test
     public void testManualBSPTreeExample() {
         DoublePrecisionContext precision = new EpsilonDoublePrecisionContext(1e-6);
 
diff --git a/src/site/xdoc/userguide/index.xml b/src/site/xdoc/userguide/index.xml
index 4c54a05..bdeb6fc 100644
--- a/src/site/xdoc/userguide/index.xml
+++ b/src/site/xdoc/userguide/index.xml
@@ -134,7 +134,7 @@
 // create a precision context with an epsilon (aka, tolerance) value of 1e-3
 DoublePrecisionContext precision = new EpsilonDoublePrecisionContext(1e-3);
 
-// test for equality
+// test for equality using the eq() method
 precision.eq(1.0009, 1.0); // true; difference is less than epsilon
 precision.eq(1.002, 1.0); // false; difference is greater than epsilon
 
@@ -142,6 +142,41 @@
 precision.compare(1.0009, 1.0); // 0
 precision.compare(1.002, 1.0); // 1
         </source>
+
+        <h4><span class="code">equals()</span> vs <span class="code">eq()</span></h4>
+        <p>
+          Many objects in <em>Commons Geometry</em> provide both a standard Java <span class="code">equals()</span>
+          method as well as an <span class="code">eq()</span> method. The <span class="code">equals()</span> method
+          always tests for <em>strict</em> equality between objects. In general, any floating point values in the two
+          objects must be exactly equal in order for the <span class="code">equals()</span> method to return true (see
+          the documentation on individual classes for details). This strictness is enforced so that
+          <span class="code">equals()</span> can behave as expected by the JDK, fulfilling properties such as
+          transitivity and the relationship to <span class="code">hashCode()</span>.
+        </p>
+        <p>
+          In contrast, the <span class="code">eq()</span> method is used to test for <em>approximate</em> equality
+          between objects, with floating point values being evaluated by a provided
+          <a class="code" href="../commons-geometry-core/apidocs/org/apache/commons/geometry/core/precision/DoublePrecisionContext.html"
+          >DoublePrecisionContext</a>. Because of this approximate nature, this method cannot be guaranteed to
+          be transitive or have any meaningful relationship to <span class="code">hashCode</span>. The
+          <span class="code">eq()</span> should be used to test for object equality in cases where floating-point
+          errors in a computation may have introduced small discrepancies in values. The example below demonstrates
+          the differences between <span class="code">equals()</span> and <span class="code">eq()</span>.
+        </p>
+        <source>
+DoublePrecisionContext precision = new EpsilonDoublePrecisionContext(1e-6);
+
+Vector2D v1 = Vector2D.of(1, 1); // (1.0, 1.0)
+Vector2D v2 = Vector2D.parse("(1, 1)"); // (1.0, 1.0)
+
+Vector2D v3 = Vector2D.of(Math.sqrt(2), 0).transform(
+        AffineTransformMatrix2D.createRotation(0.25 * Math.PI)); // (1.0000000000000002, 1.0)
+
+v1.equals(v2); // true - exactly equal
+v1.equals(v3); // false - not exactly equal
+
+v1.eq(v3, precision); // true - approximately equal according to the given precision context
+        </source>
       </subsection>
 
       <subsection name="Transforms" id="transforms">