Index: /trunk/source/lib/numbers.lisp
===================================================================
--- /trunk/source/lib/numbers.lisp	(revision 12896)
+++ /trunk/source/lib/numbers.lisp	(revision 12897)
@@ -47,5 +47,11 @@
 	(ccl:set-fpu-mode :division-by-zero division-by-zero))))
 
-
+(defconstant double-float-nan
+  #.(let ((invalid (get-fpu-mode :invalid)))
+      (unwind-protect
+	   (progn
+	     (set-fpu-mode :invalid nil)
+	     (+ double-float-positive-infinity double-float-negative-infinity))
+	(set-fpu-mode :invalid invalid))))
 
 (defun parse-float (str len off)  
@@ -109,15 +115,5 @@
 	 (nan 
 	  (return-from parse-float
-            (let* ((invalid (ccl:get-fpu-mode :invalid)))
-	    (unwind-protect
-		(progn
-		  (ccl:set-fpu-mode :invalid nil)
-		  (coerce
-		   ;; we could also have used a double-float-nan
-		   ;; variable binding here:
-		   (+ double-float-positive-infinity
-		      double-float-positive-infinity)
-		   type))
-	      (ccl:set-fpu-mode :invalid invalid)))))
+	    (coerce double-float-nan type)))
 	 (expt (setq expt (%i+ expt (* esign eexp))))
 	 (t (return-from parse-float nil)))))
