guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 82/85: Simplify scm_abs for the real case


From: Andy Wingo
Subject: [Guile-commits] 82/85: Simplify scm_abs for the real case
Date: Thu, 13 Jan 2022 03:40:27 -0500 (EST)

wingo pushed a commit to branch main
in repository guile.

commit 6058d9e05ddd1350228c2d83485a5bd7484a509c
Author: Daniel Llorens <lloda@sarc.name>
AuthorDate: Mon Jan 10 12:21:26 2022 +0100

    Simplify scm_abs for the real case
    
    * libguile/numbers.c (scm_abs): As stated. When x is a nan with the sign bit
      set, this changes the behavior of (magnitude x) back to what it was in 
3.0.7,
      to clear that bit.
---
 libguile/numbers.c | 12 +-----------
 1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/libguile/numbers.c b/libguile/numbers.c
index 9ff870aa7..1a96d9c8c 100644
--- a/libguile/numbers.c
+++ b/libguile/numbers.c
@@ -658,17 +658,7 @@ SCM_PRIMITIVE_GENERIC (scm_abs, "abs", 1, 0, 0,
   if (SCM_I_INUMP (x))
     return scm_integer_abs_i (SCM_I_INUM (x));
   else if (SCM_LIKELY (SCM_REALP (x)))
-    {
-      double xx = SCM_REAL_VALUE (x);
-      /* If x is a NaN then xx<0 is false so we return x unchanged */
-      if (xx < 0.0)
-        return scm_i_from_double (-xx);
-      /* Handle signed zeroes properly */
-      else if (SCM_UNLIKELY (xx == 0.0))
-       return flo0;
-      else
-        return x;
-    }
+    return scm_i_from_double (copysign (SCM_REAL_VALUE (x), 1.0));
   else if (SCM_BIGP (x))
     return scm_integer_abs_z (scm_bignum (x));
   else if (SCM_FRACTIONP (x))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]