unofficial mirror of bug-guile@gnu.org 
 help / color / mirror / Atom feed
From: lloda <lloda@sarc.name>
To: Maciej <m.kalandyk@outlook.com>
Cc: 69725@debbugs.gnu.org
Subject: bug#69725: Incorrect comapration between exact and inexact numbers
Date: Mon, 18 Mar 2024 17:17:02 +0100	[thread overview]
Message-ID: <787367F7-453B-4C95-B078-D4DFAA49BCF5@sarc.name> (raw)
In-Reply-To: <AM0PR10MB3586B6F48AAA60EC7FBA37A380242@AM0PR10MB3586.EURPRD10.PROD.OUTLOOK.COM>

[-- Attachment #1: Type: text/plain, Size: 61 bytes --]


Thanks for the report! Patch attached.

regards

  Daniel



[-- Attachment #2: 0001-Add-missing-branch-in-scm_is_less_than.patch --]
[-- Type: application/octet-stream, Size: 3125 bytes --]

From 189d3acdbebde503643da3817dae3fc0dd14db7d Mon Sep 17 00:00:00 2001
From: Daniel Llorens <lloda@sarc.name>
Date: Mon, 18 Mar 2024 13:53:17 +0100
Subject: [PATCH] Add missing branch in scm_is_less_than()

Fixes https://debbugs.gnu.org/69725.

* libguile/numbers.c (scm_is_less_than): Add branch for (< fraction real).
* test-suite/tests/numbers.test (<): New test.
---
 libguile/numbers.c            | 17 ++++++++++++++---
 test-suite/tests/numbers.test | 12 ++++++++++++
 2 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/libguile/numbers.c b/libguile/numbers.c
index 30a826f13..ae2aa7766 100644
--- a/libguile/numbers.c
+++ b/libguile/numbers.c
@@ -4559,6 +4559,7 @@ scm_is_less_than (SCM x, SCM y)
 	return SCM_REAL_VALUE (x) < SCM_REAL_VALUE (y);
       if (!SCM_FRACTIONP (y))
         abort ();
+      /* REALP x FRACTIONP y, see symmetric case below  */
       if (isnan (SCM_REAL_VALUE (x)))
         return 0;
       if (isinf (SCM_REAL_VALUE (x)))
@@ -4569,9 +4570,19 @@ scm_is_less_than (SCM x, SCM y)
   if (!SCM_FRACTIONP (x))
     abort ();
 
-  /* "a/b < " becomes "a < y*b" */
-  return scm_is_less_than (SCM_FRACTION_NUMERATOR (x),
-                           scm_product (y, SCM_FRACTION_DENOMINATOR (x)));
+  if (SCM_REALP (y))
+    {
+      /* FRACTIONP x REALP y, see symmetric case above */
+      if (isnan (SCM_REAL_VALUE (y)))
+        return 0;
+      if (isinf (SCM_REAL_VALUE (y)))
+        return 0.0 < SCM_REAL_VALUE (y);
+      return scm_is_less_than (x, scm_inexact_to_exact (y));
+    }
+  else
+    /* "a/b < y" becomes "a < y*b" */
+    return scm_is_less_than (SCM_FRACTION_NUMERATOR (x),
+                             scm_product (y, SCM_FRACTION_DENOMINATOR (x)));
 }
 
 static int
diff --git a/test-suite/tests/numbers.test b/test-suite/tests/numbers.test
index 0b80c0356..cf54f0369 100644
--- a/test-suite/tests/numbers.test
+++ b/test-suite/tests/numbers.test
@@ -266,6 +266,18 @@
     (pass-if (not (exact? -inf.0)))
     (pass-if (not (exact? +nan.0)))))
 
+;;;
+;;; <
+;;;
+
+(with-test-prefix "bug #69725 for (< fraction float)"
+
+  (let ((diff 879797032764096269186597679847100265884832692381817056132294700511440987615745549195576394246327599597660137250885282118923685378363495296576250891618672897887455888641129758660040580125471657527501887655846743402333407472717488972378318312674085710204045036645651022493812366478520603176717119923372376049351273979050815421434638458049196631010462508376132028146644267658632127872001/722822868417972349291869843452690786425750906620439512189327802121058061301404726887882493296646015935903482610570303382076049858386583955490031061870416075735232078523284307346352926571709615036536557063178291059619363366958123014280624087029240670600236519573317406921775499062373875623452948086789385672089163532498692518546438923870180903091519351584154949372291968970659168272384)) ; 1.217168231948292
+  (pass-if "< fraction float (I)"
+    (not (< diff 1.0)))
+  (pass-if "< fraction float (II)"
+    (< diff 2.0))))
+
 ;;;
 ;;; exp
 ;;;
-- 
2.39.2


  reply	other threads:[~2024-03-18 16:17 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-11  7:46 bug#69725: Incorrect comapration between exact and inexact numbers Maciej
2024-03-18 16:17 ` lloda [this message]
2024-03-19 17:29   ` lloda

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/guile/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=787367F7-453B-4C95-B078-D4DFAA49BCF5@sarc.name \
    --to=lloda@sarc.name \
    --cc=69725@debbugs.gnu.org \
    --cc=m.kalandyk@outlook.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).