source: public/doc/gnu-c/Scaling-by-the-Base.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: 4.6 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>Scaling by the Base (GNU C Language Manual)</title>
23
24<meta name="description" content="Scaling by the Base (GNU C Language Manual)">
25<meta name="keywords" content="Scaling by the Base (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="Rounding-Control.html" rel="next" title="Rounding Control">
34<link href="Signed-Zeros.html" rel="prev" title="Signed Zeros">
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="Scaling-by-the-Base"></span><div class="header">
59<p>
60Next: <a href="Rounding-Control.html" accesskey="n" rel="next">Rounding Control</a>, Previous: <a href="Signed-Zeros.html" accesskey="p" rel="prev">Signed Zeros</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="Scaling-by-Powers-of-the-Base"></span><h3 class="section">28.16 Scaling by Powers of the Base</h3>
64<span id="index-scaling-floating-point-by-powers-of-the-base"></span>
65<span id="index-floating_002dpoint-scaling-by-powers-of-the-base"></span>
66
67<p>We have discussed rounding errors several times in this chapter,
68but it is important to remember that when results require no more
69bits than the exponent and significand bits can represent, those results
70are <em>exact</em>.
71</p>
72<p>One particularly useful exact operation is scaling by a power of
73the base. While one, in principle, could do that with code like
74this:
75</p>
76<div class="example">
77<pre class="example">y = x * pow (2.0, (double)k); /* <span class="roman">Undesirable scaling: avoid!</span> */
78</pre></div>
79
80<p>that is not advisable, because it relies on the quality of the
81math-library power function, and that happens to be one of the
82most difficult functions in the C math library to make accurate.
83What is likely to happen on many systems is that the returned
84value from <code>pow</code> will be close to a power of two, but
85slightly different, so the subsequent multiplication introduces
86rounding error.
87</p>
88<p>The correct, and fastest, way to do the scaling is either via the
89traditional C library function, or with its C99 equivalent:
90</p>
91<div class="example">
92<pre class="example">y = ldexp (x, k); /* <span class="roman">Traditional pre-C99 style.</span> */
93y = scalbn (x, k); /* <span class="roman">C99 style.</span> */
94</pre></div>
95
96<p>Both functions return <code>x * 2**k</code>.
97See <a href="https://www.gnu.org/software/libc/manual/html_node/Normalization-Functions.html#Normalization-Functions">Normalization Functions</a> in <cite>The GNU C Library Reference Manual</cite>.
98</p>
99
100
101
102
103</body>
104</html>
Note: See TracBrowser for help on using the repository browser.