From 430c366a35dafd337c9640df518c967190ea61dd Mon Sep 17 00:00:00 2001
From: rtoy <rtoy>
Date: Thu, 25 Aug 2005 21:21:32 +0000
Subject: [PATCH] ASIN and ACOS were getting errors when given NaN's.  Check
 for that case and dispatch to the real-valued C functions in that case.  This
 fixes some errors in the asin and acos tests from ieeefp-tests (at
 common-lisp.net).

---
 code/irrat.lisp | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/code/irrat.lisp b/code/irrat.lisp
index b7e63f599..be51d17e2 100644
--- a/code/irrat.lisp
+++ b/code/irrat.lisp
@@ -5,7 +5,7 @@
 ;;; Carnegie Mellon University, and has been placed in the public domain.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/irrat.lisp,v 1.41 2004/10/19 15:07:30 rtoy Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/irrat.lisp,v 1.42 2005/08/25 21:21:32 rtoy Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -531,11 +531,12 @@
 	 (complex-asin number)
 	 (coerce (%asin (coerce number 'double-float)) 'single-float)))
     (((foreach single-float double-float))
-     (if (or (> number (coerce 1 '(dispatch-type number)))
-	     (< number (coerce -1 '(dispatch-type number))))
-	 (complex-asin number)
+     (if (or (float-nan-p number)
+	     (and (<= number (coerce 1 '(dispatch-type number)))
+		  (>= number (coerce -1 '(dispatch-type number)))))
 	 (coerce (%asin (coerce number 'double-float))
-		 '(dispatch-type number))))
+		 '(dispatch-type number))
+	 	 (complex-asin number)))
     ((complex)
      (complex-asin number))))
 
@@ -547,11 +548,12 @@
 	 (complex-acos number)
 	 (coerce (%acos (coerce number 'double-float)) 'single-float)))
     (((foreach single-float double-float))
-     (if (or (> number (coerce 1 '(dispatch-type number)))
-	     (< number (coerce -1 '(dispatch-type number))))
-	 (complex-acos number)
+     (if (or (float-nan-p number)
+	     (and (<= number (coerce 1 '(dispatch-type number)))
+		  (>= number (coerce -1 '(dispatch-type number)))))
 	 (coerce (%acos (coerce number 'double-float))
-		 '(dispatch-type number))))
+		 '(dispatch-type number))
+	 	 (complex-acos number)))
     ((complex)
      (complex-acos number))))
 
-- 
GitLab