source: public/doc/gnu-c/Round_002dTrip-Base-Conversion.html@ 02598c2

Last change on this file since 02598c2 was 02598c2, checked in by Mikhail Kirillov <w96k@…>, on Oct 6, 2022 at 12:36:29 PM

Add gnu-c

  • Property mode set to 100644
File size: 6.0 KB
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2<html>
3<!-- Copyright (C) 2022 Richard Stallman and Free Software Foundation, Inc.
4
5(The work of Trevis Rothwell and Nelson Beebe has been assigned or
6licensed to the FSF.)
7
8Permission is granted to copy, distribute and/or modify this document
9under the terms of the GNU Free Documentation License, Version 1.3 or
10any later version published by the Free Software Foundation; with the
11Invariant Sections being "GNU General Public License," with the
12Front-Cover Texts being "A GNU Manual," and with the Back-Cover
13Texts as in (a) below. A copy of the license is included in the
14section entitled "GNU Free Documentation License."
15
16(a) The FSF's Back-Cover Text is: "You have the freedom to copy and
17modify this GNU manual. Buying copies from the FSF supports it in
18developing GNU and promoting software freedom." -->
19<!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
20<head>
21<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
22<title>Round-Trip Base Conversion (GNU C Language Manual)</title>
23
24<meta name="description" content="Round-Trip Base Conversion (GNU C Language Manual)">
25<meta name="keywords" content="Round-Trip Base Conversion (GNU C Language Manual)">
26<meta name="resource-type" content="document">
27<meta name="distribution" content="global">
28<meta name="Generator" content="makeinfo">
29<link href="index.html" rel="start" title="Top">
30<link href="Symbol-Index.html" rel="index" title="Symbol Index">
31<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
32<link href="Floating-Point-in-Depth.html" rel="up" title="Floating Point in Depth">
33<link href="Further-Reading.html" rel="next" title="Further Reading">
34<link href="Complex-Arithmetic.html" rel="prev" title="Complex Arithmetic">
35<style type="text/css">
36<!--
37a.summary-letter {text-decoration: none}
38blockquote.indentedblock {margin-right: 0em}
39div.display {margin-left: 3.2em}
40div.example {margin-left: 3.2em}
41div.lisp {margin-left: 3.2em}
42kbd {font-style: oblique}
43pre.display {font-family: inherit}
44pre.format {font-family: inherit}
45pre.menu-comment {font-family: serif}
46pre.menu-preformatted {font-family: serif}
47span.nolinebreak {white-space: nowrap}
48span.roman {font-family: initial; font-weight: normal}
49span.sansserif {font-family: sans-serif; font-weight: normal}
50ul.no-bullet {list-style: none}
51-->
52</style>
53
54
55</head>
56
57<body lang="en">
58<span id="Round_002dTrip-Base-Conversion"></span><div class="header">
59<p>
60Next: <a href="Further-Reading.html" accesskey="n" rel="next">Further Reading</a>, Previous: <a href="Complex-Arithmetic.html" accesskey="p" rel="prev">Complex Arithmetic</a>, Up: <a href="Floating-Point-in-Depth.html" accesskey="u" rel="up">Floating Point in Depth</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Symbol-Index.html" title="Index" rel="index">Index</a>]</p>
61</div>
62<hr>
63<span id="Round_002dTrip-Base-Conversion-1"></span><h3 class="section">28.20 Round-Trip Base Conversion</h3>
64<span id="index-round_002dtrip-base-conversion"></span>
65<span id="index-base-conversion-_0028floating-point_0029"></span>
66<span id="index-floating_002dpoint-round_002dtrip-base-conversion"></span>
67
68<p>Most numeric programs involve converting between base-2 floating-point
69numbers, as represented by the computer, and base-10 floating-point
70numbers, as entered and handled by the programmer. What might not be
71obvious is the number of base-2 bits vs. base-10 digits required for
72each representation. Consider the following tables showing the number of
73decimal digits representable in a given number of bits, and vice versa:
74</p>
75<table>
76<tr><td width="50%">binary in</td><td width="10%">24</td><td width="10%">53</td><td width="10%">64</td><td width="10%">113</td><td width="10%">237</td></tr>
77<tr><td width="50%">decimal out</td><td width="10%">9</td><td width="10%">17</td><td width="10%">21</td><td width="10%">36</td><td width="10%">73</td></tr>
78</table>
79
80<table>
81<tr><td width="50%">decimal in</td><td width="10%">7</td><td width="10%">16</td><td width="10%">34</td><td width="10%">70</td></tr>
82<tr><td width="50%">binary out</td><td width="10%">25</td><td width="10%">55</td><td width="10%">114</td><td width="10%">234</td></tr>
83</table>
84
85<p>We can compute the table numbers with these two functions:
86</p>
87<div class="example">
88<pre class="example">int
89matula(int nbits)
90{ /* <span class="roman">Return output decimal digits needed for nbits-bits input.</span> */
91 return ((int)ceil((double)nbits / log2(10.0) + 1.0));
92}
93
94int
95goldberg(int ndec)
96{ /* <span class="roman">Return output bits needed for ndec-digits input.</span> */
97 return ((int)ceil((double)ndec / log10(2.0) + 1.0));
98}
99</pre></div>
100
101<p>One significant observation from those numbers is that we cannot
102achieve correct round-trip conversion between the decimal and
103binary formats in the same storage size! For example, we need 25
104bits to represent a 7-digit value from the 32-bit decimal format,
105but the binary format only has 24 available. Similar
106observations hold for each of the other conversion pairs.
107</p>
108<p>The general input/output base-conversion problem is astonishingly
109complicated, and solutions were not generally known until the
110publication of two papers in 1990 that are listed later near the end
111of this chapter. For the 128-bit formats, the worst case needs more
112than 11,500 decimal digits of precision to guarantee correct rounding
113in a binary-to-decimal conversion!
114</p>
115<p>For further details see the references for Bennett Goldberg and David
116Matula.
117</p>
118
119<hr>
120<div class="header">
121<p>
122Next: <a href="Further-Reading.html" accesskey="n" rel="next">Further Reading</a>, Previous: <a href="Complex-Arithmetic.html" accesskey="p" rel="prev">Complex Arithmetic</a>, Up: <a href="Floating-Point-in-Depth.html" accesskey="u" rel="up">Floating Point in Depth</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Symbol-Index.html" title="Index" rel="index">Index</a>]</p>
123</div>
124
125
126
127</body>
128</html>
Note: See TracBrowser for help on using the repository browser.