[cmucl-ticket] Re: #1: prin1 and ~E produce different outputs.

cmucl cmucl-devel at common-lisp.net
Fri Aug 11 21:32:41 UTC 2006


#1: prin1 and ~E produce different outputs.
------------------------+---------------------------------------------------
  Reporter:  anonymous  |       Owner:  rtoy    
      Type:  defect     |      Status:  assigned
  Priority:  minor      |   Milestone:          
 Component:  Core       |     Version:  19c     
Resolution:             |    Keywords:  printing
------------------------+---------------------------------------------------
Old description:

> (let ((x (random 1d-3)))
>   (values (prin1-to-string x) (format nil "~E" x)))
>
> will produce different significant digits.  I think the problem is in ~E
> which calls lisp::scale-exponent to scale the number between 0.1 and 1.
> I think we could just call flonum-to-digits which will give us the digits
> and the exponent.  We can massage that into the desired digits and
> exponent as in scale-exponent, but we won't have the round-off problem.
>
> Maybe.

New description:

 {{{
 (let ((x (random 1d-3)))
   (values (prin1-to-string x)
           (format nil "~E" x)))
 }}}

 will produce different significant digits.  I think the problem is in ~E
 which calls lisp::scale-exponent to scale the number between 0.1 and 1.  I
 think we could just call flonum-to-digits which will give us the digits
 and the exponent.  We can massage that into the desired digits and
 exponent as in scale-exponent, but we won't have the round-off problem.

 Maybe.

-- 
Ticket URL: <http://trac.common-lisp.net/cmucl/ticket/1>
cmucl <http://common-lisp.net/project/cmucl>
cmucl


More information about the cmucl-ticket mailing list