From 8e0c67d0c74e1dd5206d2b068734d863440ca286 Mon Sep 17 00:00:00 2001
From: Raymond Toy <toy.raymond@gmail.com>
Date: Tue, 25 Nov 2014 09:32:32 -0800
Subject: [PATCH] Return -infinity for %log2 and %log10 of +0.

---
 src/code/irrat-dd.lisp | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/code/irrat-dd.lisp b/src/code/irrat-dd.lisp
index d0acdd725..36051fcac 100644
--- a/src/code/irrat-dd.lisp
+++ b/src/code/irrat-dd.lisp
@@ -1379,6 +1379,9 @@ pi/4    11001001000011111101101010100010001000010110100011000 010001101001100010
     (declare (type double-double-float x)
 	     (optimize (speed 3) (space 0)
 		       (inhibit-warnings 3)))
+    (when (eql x 0w0)
+      ;; log2(+0) = -infinity
+      (return-from dd-%log2 (/ -1 x)))
     (multiple-value-bind (e x y z)
 	(compute-log x)
       ;; Multiply log of fraction by log2(e) and base 2 exponent by 1
@@ -1395,6 +1398,9 @@ pi/4    11001001000011111101101010100010001000010110100011000 010001101001100010
     (declare (type double-double-float x)
 	     (optimize (speed 3) (space 0)
 		       (inhibit-warnings 3)))
+    (when (eql x 0w0)
+      ;; log2(+0) = -infinity
+      (return-from dd-%log10 (/ -1 x)))
     (multiple-value-bind (e x y z)
 	(compute-log x)
       ;; Multiply log of fraction by log10(e) and base 2 exponent by log10(2).
-- 
GitLab