close Warning: Can't synchronize with repository "(default)" (/project/cmucl/public_html/git/cmucl.git does not appear to be a Git repository.). Look in the Trac log for more information.

Opened 14 years ago

Closed 12 years ago

#1 closed defect (fixed)

prin1 and ~E produce different outputs.

Reported by: anonymous Owned by: Raymond Toy
Priority: minor Milestone:
Component: Core Version: 19c
Keywords: printing Cc:

Description (last modified by Raymond Toy)

(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.

Change History (4)

comment:1 Changed 14 years ago by Raymond Toy

Owner: changed from somebody to Raymond Toy
Status: newassigned

comment:2 Changed 14 years ago by Raymond Toy

Version: 19c

comment:3 Changed 13 years ago by Raymond Toy

Description: modified (diff)

comment:4 Changed 12 years ago by Raymond Toy

Resolution: fixed
Status: assignedclosed

One particular example is

(format nil "~E" 1.234567890123456789d4)
"1.2345678901234565d+0"

The right answer is

"1.2345678901234567d+0"

which is what prin1 returns.

This should now be fixed in CVS.

Note: See TracTickets for help on using tickets.