Common LISP: the language
How to read floating point numbers accurately
PLDI '90 Proceedings of the ACM SIGPLAN 1990 conference on Programming language design and implementation
How to print floating-point numbers accurately
PLDI '90 Proceedings of the ACM SIGPLAN 1990 conference on Programming language design and implementation
Binary to decimal, one more time
Beauty is our business
A simple program whose proof isn't
Beauty is our business
Printing floating-point numbers quickly and accurately
PLDI '96 Proceedings of the ACM SIGPLAN 1996 conference on Programming language design and implementation
The art of computer programming, volume 1 (3rd ed.): fundamental algorithms
The art of computer programming, volume 1 (3rd ed.): fundamental algorithms
Proceedings of the IFIP TC2/WG2.5 working conference on Quality of numerical software: assessment and enhancement
The art of computer programming, volume 2 (3rd ed.): seminumerical algorithms
The art of computer programming, volume 2 (3rd ed.): seminumerical algorithms
Revised5 report on the algorithmic language scheme
ACM SIGPLAN Notices
Structured Programming with go to Statements
ACM Computing Surveys (CSUR)
Communicating sequential processes
Communications of the ACM
Communications of the ACM
Binary conversion, with fixed decimal precision, of a decimal fraction
Communications of the ACM
Revised report on the algorithmic language scheme
ACM SIGPLAN Lisp Pointers
A Discipline of Programming
The Java Language Specification
The Java Language Specification
PASCAL user manual and report
History of programming languages---II
Draft proposed ANS FORTRAN BSR X3.9 X3J3/76
ACM SIGPLAN Notices
Son of seminumerical algorithms
ACM SIGSAM Bulletin
Lisp machine manual
Hi-index | 0.00 |
We present algorithms for accurately converting floating-point numbers to decimal representation. The key idea is to carry along with the computation an explicit representation of the required rounding accuracy.We begin with the simpler problem of converting fixed-point fractions. A modification of the well-known algorithm for radix-conversion of fixed-point fractions by multiplication explicitly determines when to terminate the conversion process; a variable number of digits are produced. The algorithm has these properties:• No information is lost; the original fraction can be recovered from the output by rounding.• No "garbage digits" are produced.• The output is correctly rounded.• It is never necessary to propagate carries on rounding.We then derive two algorithms for free-format out-put of floating-point numbers. The first simply scales the given floating-point number to an appropriate fractional range and then applies the algorithm for fractions. This is quite fast and simple to code but has inaccuracies stemming from round-off errors and oversimplification. The second algorithm guarantees mathematical accuracy by using multiple-precision integer arithmetic and handling special cases. Both algorithms produce no more digits than necessary (intuitively, the "1.3 prints as 1.2999999" problem does not occur).Finally, we modify the free-format conversion algorithm for use in fixed-format applications. Information may be lost if the fixed format provides too few digit positions, but the output is always correctly rounded. On the other hand, no "garbage digits" are ever produced, even if the fixed format specifies too many digit positions (intuitively, the "4/3 prints as 1.333333328366279602" problem does not occur).