1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4<title>Using Boost.Multiprecision</title> 5<link rel="stylesheet" href="../../math.css" type="text/css"> 6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> 7<link rel="home" href="../../index.html" title="Math Toolkit 2.12.0"> 8<link rel="up" href="../high_precision.html" title="Using Boost.Math with High-Precision Floating-Point Libraries"> 9<link rel="prev" href="why_high_precision.html" title="Why use a high-precision library rather than built-in floating-point types?"> 10<link rel="next" href="float128.html" title="Using with GCC's __float128 datatype"> 11</head> 12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> 13<table cellpadding="2" width="100%"><tr> 14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> 15<td align="center"><a href="../../../../../../index.html">Home</a></td> 16<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> 17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> 18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> 19<td align="center"><a href="../../../../../../more/index.htm">More</a></td> 20</tr></table> 21<hr> 22<div class="spirit-nav"> 23<a accesskey="p" href="why_high_precision.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../high_precision.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="float128.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> 24</div> 25<div class="section"> 26<div class="titlepage"><div><div><h3 class="title"> 27<a name="math_toolkit.high_precision.use_multiprecision"></a><a class="link" href="use_multiprecision.html" title="Using Boost.Multiprecision">Using 28 Boost.Multiprecision</a> 29</h3></div></div></div> 30<p> 31 <span class="bold"><strong>All new projects are recommended to use <a href="../../../../../../libs/multiprecision/doc/html/index.html" target="_top">Boost.Multiprecision</a>.</strong></span> 32 </p> 33<h6> 34<a name="math_toolkit.high_precision.use_multiprecision.h0"></a> 35 <span class="phrase"><a name="math_toolkit.high_precision.use_multiprecision.using_boost_multiprecision_to_ge"></a></span><a class="link" href="use_multiprecision.html#math_toolkit.high_precision.use_multiprecision.using_boost_multiprecision_to_ge">Using 36 Boost.Multiprecision to generate a high-precision array of sine coefficients 37 for use with FFT.</a> 38 </h6> 39<p> 40 The Boost.Multiprecision library can be used for computations requiring precision 41 exceeding that of standard built-in types such as <code class="computeroutput"><span class="keyword">float</span></code>, 42 <code class="computeroutput"><span class="keyword">double</span></code> and <code class="computeroutput"><span class="keyword">long</span> 43 <span class="keyword">double</span></code>. For extended-precision calculations, 44 Boost.Multiprecision supplies a template data type called <code class="computeroutput"><span class="identifier">cpp_bin_float</span></code>. 45 The number of decimal digits of precision is fixed at compile-time via a 46 template parameter. 47 </p> 48<p> 49 One often needs to compute tables of numbers in mathematical software. To 50 avoid the <a href="https://en.wikipedia.org/wiki/Rounding#Table-maker's_dilemma" target="_top">Table-maker's 51 dilemma</a> it is necessary to use a higher precision type to compute 52 the table values so that they have the nearest representable bit-pattern 53 for the type, say <code class="computeroutput"><span class="keyword">double</span></code>, of 54 the table value. 55 </p> 56<p> 57 This example is a program <code class="computeroutput"><span class="identifier">fft_since_table</span><span class="special">.</span><span class="identifier">cpp</span></code> that 58 writes a header file <code class="computeroutput"><span class="identifier">sines</span><span class="special">.</span><span class="identifier">hpp</span></code> containing 59 an array of sine coefficients for use with a Fast Fourier Transform (FFT), 60 that can be included by the FFT program. 61 </p> 62<p> 63 To use Boost.Multiprecision's high-precision floating-point types and constants, 64 we need some includes: 65 </p> 66<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">math</span><span class="special">/</span><span class="identifier">constants</span><span class="special">/</span><span class="identifier">constants</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 67<span class="comment">// using boost::math::constants::pi;</span> 68 69<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multiprecision</span><span class="special">/</span><span class="identifier">cpp_bin_float</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> <span class="comment">// for</span> 70<span class="comment">// using boost::multiprecision::cpp_bin_float and</span> 71<span class="comment">// using boost::multiprecision::cpp_bin_float_50;</span> 72<span class="comment">// using boost::multiprecision::cpp_bin_float_quad;</span> 73 74<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">array</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> <span class="comment">// or <array> for std::array</span> 75 76<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> 77<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">limits</span><span class="special">></span> 78<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">vector</span><span class="special">></span> 79<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">algorithm</span><span class="special">></span> 80<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iomanip</span><span class="special">></span> 81<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iterator</span><span class="special">></span> 82<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">fstream</span><span class="special">></span> 83</pre> 84<p> 85 First, this example defines a prolog text string which is a C++ comment with 86 the program licence, copyright etc. (You would of course, tailor this to 87 your needs, including <span class="bold"><strong>your</strong></span> copyright claim). 88 This will appear at the top of the written header file <code class="computeroutput"><span class="identifier">sines</span><span class="special">.</span><span class="identifier">hpp</span></code>. 89 </p> 90<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">cpp_bin_float_50</span><span class="special">;</span> 91<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">constants</span><span class="special">::</span><span class="identifier">pi</span><span class="special">;</span> 92</pre> 93<p> 94 A fast Fourier transform (FFT), for example, may use a table of the values 95 of sin((π/2<sup>n</sup>) in its implementation details. In order to maximize the precision 96 in the FFT implementation, the precision of the tabulated trigonometric values 97 should exceed that of the built-in floating-point type used in the FFT. 98 </p> 99<p> 100 The sample below computes a table of the values of sin(π/2<sup>n</sup>) in the range 101 1 <= n <= 31. 102 </p> 103<p> 104 This program makes use of, among other program elements, the data type <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">cpp_bin_float_50</span></code> for a precision of 50 105 decimal digits from Boost.Multiprecision, the value of constant π retrieved 106 from Boost.Math, guaranteed to be initialized with the very last bit of precision 107 for the type, here <code class="computeroutput"><span class="identifier">cpp_bin_float_50</span></code>, 108 and a C++11 lambda function combined with <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span><span class="special">()</span></code>. 109 </p> 110<p> 111 define the number of values (32) in the array of sines. 112 </p> 113<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">size</span> <span class="special">=</span> <span class="number">32U</span><span class="special">;</span> 114<span class="comment">//cpp_bin_float_50 p = pi<cpp_bin_float_50>();</span> 115<span class="identifier">cpp_bin_float_50</span> <span class="identifier">p</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">constants</span><span class="special">::</span><span class="identifier">pi</span><span class="special"><</span><span class="identifier">cpp_bin_float_50</span><span class="special">>();</span> 116 117<span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span> <span class="special"><</span><span class="identifier">cpp_bin_float_50</span><span class="special">></span> <span class="identifier">sin_values</span> <span class="special">(</span><span class="identifier">size</span><span class="special">);</span> 118<span class="keyword">unsigned</span> <span class="identifier">n</span> <span class="special">=</span> <span class="number">1U</span><span class="special">;</span> 119<span class="comment">// Generate the sine values.</span> 120<span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span> 121<span class="special">(</span> 122 <span class="identifier">sin_values</span><span class="special">.</span><span class="identifier">begin</span> <span class="special">(),</span> 123 <span class="identifier">sin_values</span><span class="special">.</span><span class="identifier">end</span> <span class="special">(),</span> 124 <span class="special">[&</span><span class="identifier">n</span><span class="special">](</span><span class="identifier">cpp_bin_float_50</span><span class="special">&</span> <span class="identifier">y</span><span class="special">)</span> 125 <span class="special">{</span> 126 <span class="identifier">y</span> <span class="special">=</span> <span class="identifier">sin</span><span class="special">(</span> <span class="identifier">pi</span><span class="special"><</span><span class="identifier">cpp_bin_float_50</span><span class="special">>()</span> <span class="special">/</span> <span class="identifier">pow</span><span class="special">(</span><span class="identifier">cpp_bin_float_50</span> <span class="special">(</span><span class="number">2</span><span class="special">),</span> <span class="identifier">n</span><span class="special">));</span> 127 <span class="special">++</span><span class="identifier">n</span><span class="special">;</span> 128 <span class="special">}</span> 129<span class="special">);</span> 130</pre> 131<p> 132 Define the floating-point type for the generated file, either built-in <code class="computeroutput"><span class="keyword">double</span><span class="special">,</span> </code>float, 133 or <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">double</span></code>, 134 or a user defined type like <code class="computeroutput"><span class="identifier">cpp_bin_float_50</span></code>. 135 </p> 136<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">fp_type</span> <span class="special">=</span> <span class="string">"double"</span><span class="special">;</span> 137 138<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Generating an `std::array` or `boost::array` for floating-point type: "</span> 139 <span class="special"><<</span> <span class="identifier">fp_type</span> <span class="special"><<</span> <span class="string">". "</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 140</pre> 141<p> 142 By default, output would only show the standard 6 decimal digits, so set 143 precision to show enough significant digits for the chosen floating-point 144 type. For <code class="computeroutput"><span class="identifier">cpp_bin_float_50</span></code> 145 is 50. (50 decimal digits should be ample for most applications). 146 </p> 147<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span> <span class="identifier">precision</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">cpp_bin_float_50</span><span class="special">>::</span><span class="identifier">digits10</span><span class="special">;</span> 148 149<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Sines table precision is "</span> <span class="special"><<</span> <span class="identifier">precision</span> <span class="special"><<</span> <span class="string">" decimal digits. "</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 150</pre> 151<p> 152 Of course, one could also choose a lower precision for the table values, 153 for example, 154 </p> 155<p> 156 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span> <span class="identifier">precision</span> 157 <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">cpp_bin_float_quad</span><span class="special">>::</span><span class="identifier">max_digits10</span><span class="special">;</span></code> 158 </p> 159<p> 160 128-bit 'quad' precision of 36 decimal digits would be sufficient for the 161 most precise current <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">double</span></code> 162 implementations using 128-bit. In general, it should be a couple of decimal 163 digits more (guard digits) than <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">>::</span><span class="identifier">max_digits10</span></code> 164 for the target system floating-point type. (If the implementation does not 165 provide <code class="computeroutput"><span class="identifier">max_digits10</span></code>, the 166 the Kahan formula <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">>::</span><span class="identifier">digits</span> <span class="special">*</span> <span class="number">3010</span><span class="special">/</span><span class="number">10000</span> 167 <span class="special">+</span> <span class="number">2</span></code> 168 can be used instead). 169 </p> 170<p> 171 The compiler will read these values as decimal digits strings and use the 172 nearest representation for the floating-point type. 173 </p> 174<p> 175 Now output all the sine table, to a file of your chosen name. 176 </p> 177<pre class="programlisting"><span class="keyword">const</span> <span class="keyword">char</span> <span class="identifier">sines_name</span><span class="special">[]</span> <span class="special">=</span> <span class="string">"sines.hpp"</span><span class="special">;</span> <span class="comment">// Assuming in same directory as .exe</span> 178 179<span class="identifier">std</span><span class="special">::</span><span class="identifier">ofstream</span> <span class="identifier">fout</span><span class="special">(</span><span class="identifier">sines_name</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">::</span><span class="identifier">out</span><span class="special">);</span> <span class="comment">// Creates if no file exists,</span> 180<span class="comment">// & uses default overwrite/ ios::replace.</span> 181<span class="keyword">if</span> <span class="special">(</span><span class="identifier">fout</span><span class="special">.</span><span class="identifier">is_open</span><span class="special">()</span> <span class="special">==</span> <span class="keyword">false</span><span class="special">)</span> 182<span class="special">{</span> <span class="comment">// failed to open OK!</span> 183 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Open file "</span> <span class="special"><<</span> <span class="identifier">sines_name</span> <span class="special"><<</span> <span class="string">" failed!"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 184 <span class="keyword">return</span> <span class="identifier">EXIT_FAILURE</span><span class="special">;</span> 185<span class="special">}</span> 186<span class="keyword">else</span> 187<span class="special">{</span> <span class="comment">// Write prolog etc as a C++ comment.</span> 188 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Open file "</span> <span class="special"><<</span> <span class="identifier">sines_name</span> <span class="special"><<</span> <span class="string">" for output OK."</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 189 <span class="identifier">fout</span> <span class="special"><<</span> <span class="identifier">prolog</span> 190 <span class="special"><<</span> <span class="string">"// Table of "</span> <span class="special"><<</span> <span class="identifier">sin_values</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span> <span class="special"><<</span> <span class="string">" values with "</span> 191 <span class="special"><<</span> <span class="identifier">precision</span> <span class="special"><<</span> <span class="string">" decimal digits precision,\n"</span> 192 <span class="string">"// generated by program fft_sines_table.cpp.\n"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 193 194<span class="identifier">fout</span> <span class="special"><<</span> <span class="string">"#include <array> // std::array"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 195 196<span class="comment">// Write the table of sines as a C++ array.</span> 197 <span class="identifier">fout</span> <span class="special"><<</span> <span class="string">"\nstatic const std::array<double, "</span> <span class="special"><<</span> <span class="identifier">size</span> <span class="special"><<</span> <span class="string">"> sines =\n"</span> 198 <span class="string">"{{\n"</span><span class="special">;</span> <span class="comment">// 2nd { needed for some old GCC compiler versions.</span> 199 <span class="identifier">fout</span><span class="special">.</span><span class="identifier">precision</span><span class="special">(</span><span class="identifier">precision</span><span class="special">);</span> 200 201 <span class="keyword">for</span> <span class="special">(</span><span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0U</span><span class="special">;</span> <span class="special">;)</span> 202 <span class="special">{</span> 203 <span class="identifier">fout</span> <span class="special"><<</span> <span class="string">" "</span> <span class="special"><<</span> <span class="identifier">sin_values</span><span class="special">[</span><span class="identifier">i</span><span class="special">];</span> 204 <span class="keyword">if</span> <span class="special">(</span><span class="identifier">i</span> <span class="special">==</span> <span class="identifier">sin_values</span><span class="special">.</span><span class="identifier">size</span><span class="special">()-</span><span class="number">1</span><span class="special">)</span> 205 <span class="special">{</span> <span class="comment">// next is last value.</span> 206 <span class="identifier">fout</span> <span class="special"><<</span> <span class="string">"\n}}; // array sines\n"</span><span class="special">;</span> <span class="comment">// 2nd } needed for some old GCC compiler versions.</span> 207 <span class="keyword">break</span><span class="special">;</span> 208 <span class="special">}</span> 209 <span class="keyword">else</span> 210 <span class="special">{</span> 211 <span class="identifier">fout</span> <span class="special"><<</span> <span class="string">",\n"</span><span class="special">;</span> 212 <span class="identifier">i</span><span class="special">++;</span> 213 <span class="special">}</span> 214 <span class="special">}</span> <span class="comment">// for</span> 215 216 <span class="identifier">fout</span><span class="special">.</span><span class="identifier">close</span><span class="special">();</span> 217 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Closed file "</span> <span class="special"><<</span> <span class="identifier">sines_name</span> <span class="special"><<</span> <span class="string">" for output."</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 218<span class="special">}</span> 219</pre> 220<p> 221 The output file generated can be seen at <a href="../../../../example/sines.hpp" target="_top">../../example/sines.hpp</a> 222 </p> 223<p> 224 The table output is: 225 </p> 226<pre class="programlisting"><span class="identifier">The</span> <span class="identifier">printed</span> <span class="identifier">table</span> <span class="identifier">is</span><span class="special">:</span> 227 228 <span class="number">1</span> 229 <span class="number">0.70710678118654752440084436210484903928483593768847</span> 230 <span class="number">0.38268343236508977172845998403039886676134456248563</span> 231 <span class="number">0.19509032201612826784828486847702224092769161775195</span> 232 <span class="number">0.098017140329560601994195563888641845861136673167501</span> 233 <span class="number">0.049067674327418014254954976942682658314745363025753</span> 234 <span class="number">0.024541228522912288031734529459282925065466119239451</span> 235 <span class="number">0.012271538285719926079408261951003212140372319591769</span> 236 <span class="number">0.0061358846491544753596402345903725809170578863173913</span> 237 <span class="number">0.003067956762965976270145365490919842518944610213452</span> 238 <span class="number">0.0015339801862847656123036971502640790799548645752374</span> 239 <span class="number">0.00076699031874270452693856835794857664314091945206328</span> 240 <span class="number">0.00038349518757139558907246168118138126339502603496474</span> 241 <span class="number">0.00019174759731070330743990956198900093346887403385916</span> 242 <span class="number">9.5873799095977345870517210976476351187065612851145e-05</span> 243 <span class="number">4.7936899603066884549003990494658872746866687685767e-05</span> 244 <span class="number">2.3968449808418218729186577165021820094761474895673e-05</span> 245 <span class="number">1.1984224905069706421521561596988984804731977538387e-05</span> 246 <span class="number">5.9921124526424278428797118088908617299871778780951e-06</span> 247 <span class="number">2.9960562263346607504548128083570598118251878683408e-06</span> 248 <span class="number">1.4980281131690112288542788461553611206917585861527e-06</span> 249 <span class="number">7.4901405658471572113049856673065563715595930217207e-07</span> 250 <span class="number">3.7450702829238412390316917908463317739740476297248e-07</span> 251 <span class="number">1.8725351414619534486882457659356361712045272098287e-07</span> 252 <span class="number">9.3626757073098082799067286680885620193236507169473e-08</span> 253 <span class="number">4.681337853654909269511551813854009695950362701667e-08</span> 254 <span class="number">2.3406689268274552759505493419034844037886207223779e-08</span> 255 <span class="number">1.1703344634137277181246213503238103798093456639976e-08</span> 256 <span class="number">5.8516723170686386908097901008341396943900085051757e-09</span> 257 <span class="number">2.9258361585343193579282304690689559020175857150074e-09</span> 258 <span class="number">1.4629180792671596805295321618659637103742615227834e-09</span> 259<span class="special">*/</span> 260</pre> 261<p> 262 The output can be copied as text and readily integrated into a given source 263 code. Alternatively, the output can be written to a text or even be used 264 within a self-written automatic code generator as this example. 265 </p> 266<p> 267 A computer algebra system can be used to verify the results obtained from 268 Boost.Math and Boost.Multiprecision. For example, the <a href="http://www.wolfram.com/products/mathematica/index.html" target="_top">Wolfram 269 Mathematica</a> computer algebra system can obtain a similar table with 270 the command: 271 </p> 272<pre class="programlisting"><span class="identifier">Table</span><span class="special">[</span><span class="identifier">N</span><span class="special">[</span><span class="identifier">Sin</span><span class="special">[</span><span class="identifier">Pi</span> <span class="special">/</span> <span class="special">(</span><span class="number">2</span><span class="special">^</span><span class="identifier">n</span><span class="special">)],</span> <span class="number">50</span><span class="special">],</span> <span class="special">{</span><span class="identifier">n</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">31</span><span class="special">,</span> <span class="number">1</span><span class="special">}]</span> 273</pre> 274<p> 275 The <a href="http://www.wolframalpha.com/" target="_top">Wolfram Alpha</a> computational 276 knowledge engine can also be used to generate this table. The same command 277 can be pasted into the compute box. 278 </p> 279<p> 280 The full source of this example is at <a href="../../../../example/fft_sines_table.cpp" target="_top">fft_sines_table.cpp</a> 281 </p> 282</div> 283<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 284<td align="left"></td> 285<td align="right"><div class="copyright-footer">Copyright © 2006-2019 Nikhar 286 Agrawal, Anton Bikineev, Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, 287 Hubert Holin, Bruno Lalande, John Maddock, Jeremy Murphy, Matthew Pulver, Johan 288 Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, 289 Daryle Walker and Xiaogang Zhang<p> 290 Distributed under the Boost Software License, Version 1.0. (See accompanying 291 file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) 292 </p> 293</div></td> 294</tr></table> 295<hr> 296<div class="spirit-nav"> 297<a accesskey="p" href="why_high_precision.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../high_precision.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="float128.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> 298</div> 299</body> 300</html> 301