]> git.eshelyaron.com Git - emacs.git/commitdiff
; * src/fns.c (fixnum_float_cmp): Explain argument constraint.
authorMattias Engdegård <mattiase@acm.org>
Thu, 4 Jul 2024 15:48:16 +0000 (17:48 +0200)
committerEshel Yaron <me@eshelyaron.com>
Sun, 7 Jul 2024 13:16:51 +0000 (15:16 +0200)
Suggested by Pip Cet.

(cherry picked from commit fa6f088a483f1f2e19863800c6215a8136288b8f)

src/fns.c

index 07afcada62f7f8e557c500137e207bbbadf057de..22947b2649f90b35b2acc1d2d981323249b36b85 100644 (file)
--- a/src/fns.c
+++ b/src/fns.c
@@ -3012,16 +3012,18 @@ bool_vector_cmp (Lisp_Object a, Lisp_Object b)
   return (d & aw) ? 1 : -1;
 }
 
-/* Return -1 if a<b, 1 if a>b, 0 if a=b or if b is NaN.  */
+/* Return -1 if a<b, 1 if a>b, 0 if a=b or if b is NaN (a must be a fixnum).  */
 static inline int
 fixnum_float_cmp (EMACS_INT a, double b)
 {
   double fa = (double)a;
   if (fa == b)
     {
-      /* This doesn't mean that a=b because the conversion may have
-        rounded, but b must be an integer that fits in an EMACS_INT
-        and we can compare in the integer domain instead.  */
+      /* This doesn't mean that a=b because the conversion may have rounded.
+        However, b must be an integer that fits in an EMACS_INT,
+        because |b| ≤ 2|a| and EMACS_INT has at least one bit more than
+        needed to represent any fixnum.
+        Thus we can compare in the integer domain instead.  */
       EMACS_INT ib = b;                /* lossless conversion */
       return a < ib ? -1 : a > ib;
     }