From a44b6dd64bae402efb2a39879a64d1ce4de188a2 Mon Sep 17 00:00:00 2001 From: rtoy <rtoy> Date: Tue, 15 Apr 2008 16:31:58 +0000 Subject: [PATCH] Use single/double-from-bits to create the result, to match the style of the rest of the routine. --- code/float.lisp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/code/float.lisp b/code/float.lisp index 7b3877365..eea37b783 100644 --- a/code/float.lisp +++ b/code/float.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/float.lisp,v 1.40 2008/04/15 15:34:34 rtoy Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/float.lisp,v 1.41 2008/04/15 16:31:58 rtoy Exp $") ;;; ;;; ********************************************************************** ;;; @@ -827,10 +827,13 @@ (error 'floating-point-underflow :operation 'scale-float :operands (list x exp))) (let ((shift (1- new-exp))) + ;; Is it necessary to have this IF here? Is there any case + ;; where (ash sig shift) won't return 0 when + ;; shift < -(digits-1)? (if (< shift (- (1- digits))) (etypecase x - (single-float (float-sign x 0f0)) - (double-float (float-sign x 0d0))) + (single-float (single-from-bits sign 0 0)) + (double-float (double-from-bits sign 0 0))) (etypecase x (single-float (single-from-bits sign 0 (ash sig shift))) (double-float (double-from-bits sign 0 (ash sig shift))))))) -- GitLab