Index: /trunk/ccl/lib/numbers.lisp
===================================================================
--- /trunk/ccl/lib/numbers.lisp	(revision 5675)
+++ /trunk/ccl/lib/numbers.lisp	(revision 5676)
@@ -778,8 +778,16 @@
   completely accurate, giving a result that isn't as pretty."
   (if (floatp number)
-      (multiple-value-bind (s e sign) (integer-decode-float number)
-         (if (eq sign -1) (setq s (- s)))
-         (if (%iminusp e) (/ s (ash 1 (%i- 0 e))) (ash s e)))
-    (if (rationalp number) number
+    (multiple-value-bind (s e sign)
+        (number-case number
+          (short-float
+           (integer-decode-short-float number))
+          (double-float
+           (integer-decode-double-float number)))
+      (if (eq sign -1) (setq s (- s)))
+      (if (%iminusp e)
+        (/ s (ash 1 (%i- 0 e)))
+        (ash s e)))
+    (if (rationalp number)
+      number
       (report-bad-arg number 'real))))
 
