Subject: bug#25786: closed (Re: bug#25786: [PATCH] use of abs() in numbers.c: should be labs())

From: [email-masked] (GNU bug Tracking System)
Date: Tue, 21 Feb 2017 21:14:02 +0000

Your bug report

#25786: [PATCH] use of abs() in numbers.c: should be labs()

which was filed against the guile package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
25786: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=25786
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#25786: [PATCH] use of abs() in numbers.c: should be labs()
From: Andy Wingo <[email-masked]>
To: Matt Wette <[email-masked]>
Cc: [email-masked]
Date: Tue, 21 Feb 2017 22:13:11 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

On Sat 18 Feb 2017 18:46, Matt Wette <[email-masked]> writes:

> In libguile/numbers.c abs() is used for long argument where labs() should be used. 
> A patch is included below for guile-2.1.7.

Applied.  Thank you!

Andy

Subject: [PATCH] use of abs() in numbers.c: should be labs()
From: Matt Wette <[email-masked]>
To: [email-masked]
Date: Sat, 18 Feb 2017 09:46:07 -0800
List-Id: <debbugs-submit.debbugs.gnu.org>

In libguile/numbers.c abs() is used for long argument where labs() should be used.  
A patch is included below for guile-2.1.7.

/* Returns log(n/d), for exact non-zero integers n and d */
static SCM
log_of_fraction (SCM n, SCM d)
{
  long n_size = scm_to_long (scm_integer_length (n));
  long d_size = scm_to_long (scm_integer_length (d));

  if (abs (n_size - d_size) > 1)
    return (scm_difference (log_of_exact_integer (n),
                            log_of_exact_integer (d)));

--- libguile/numbers.c.orig	2017-02-18 08:29:52.000000000 -0800
+++ libguile/numbers.c	2017-02-18 08:30:23.000000000 -0800
@@ -9951,7 +9951,7 @@
   long n_size = scm_to_long (scm_integer_length (n));
   long d_size = scm_to_long (scm_integer_length (d));
 
-  if (abs (n_size - d_size) > 1)
+  if (labs (n_size - d_size) > 1)
     return (scm_difference (log_of_exact_integer (n),
 			    log_of_exact_integer (d)));
   else if (scm_is_false (scm_negative_p (n)))