diff options
author | Chanho Park <chanho61.park@samsung.com> | 2014-12-11 18:55:56 +0900 |
---|---|---|
committer | Chanho Park <chanho61.park@samsung.com> | 2014-12-11 18:55:56 +0900 |
commit | 08c1e93fa36a49f49325a07fe91ff92c964c2b6c (patch) | |
tree | 7a7053ceb8874b28ec4b868d4c49b500008a102e /libs/multiprecision/doc/html | |
parent | bb4dd8289b351fae6b55e303f189127a394a1edd (diff) | |
download | boost-08c1e93fa36a49f49325a07fe91ff92c964c2b6c.tar.gz boost-08c1e93fa36a49f49325a07fe91ff92c964c2b6c.tar.bz2 boost-08c1e93fa36a49f49325a07fe91ff92c964c2b6c.zip |
Imported Upstream version 1.57.0upstream/1.57.0
Diffstat (limited to 'libs/multiprecision/doc/html')
79 files changed, 31025 insertions, 0 deletions
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/indexes.html b/libs/multiprecision/doc/html/boost_multiprecision/indexes.html new file mode 100644 index 0000000000..4e16e2c321 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/indexes.html @@ -0,0 +1,49 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Indexes</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="prev" href="map/ack.html" title="Acknowledgements"> +<link rel="next" href="indexes/s01.html" title="Function Index"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="map/ack.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="indexes/s01.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="boost_multiprecision.indexes"></a><a class="link" href="indexes.html" title="Indexes">Indexes</a> +</h2></div></div></div> +<div class="toc"><dl class="toc"> +<dt><span class="section"><a href="indexes/s01.html">Function Index</a></span></dt> +<dt><span class="section"><a href="indexes/s02.html">Class Index</a></span></dt> +<dt><span class="section"><a href="indexes/s03.html">Typedef Index</a></span></dt> +<dt><span class="section"><a href="indexes/s04.html">Index</a></span></dt> +</dl></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="map/ack.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="indexes/s01.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/indexes/s01.html b/libs/multiprecision/doc/html/boost_multiprecision/indexes/s01.html new file mode 100644 index 0000000000..37b47baccf --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/indexes/s01.html @@ -0,0 +1,667 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Function Index</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../indexes.html" title="Indexes"> +<link rel="prev" href="../indexes.html" title="Indexes"> +<link rel="next" href="s02.html" title="Class Index"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../indexes.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.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="s02.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="idm1549766464"></a>Function Index</h3></div></div></div> +<p><a class="link" href="s01.html#idx_id_0">A</a> <a class="link" href="s01.html#idx_id_1">B</a> <a class="link" href="s01.html#idx_id_2">C</a> <a class="link" href="s01.html#idx_id_3">D</a> <a class="link" href="s01.html#idx_id_4">E</a> <a class="link" href="s01.html#idx_id_5">F</a> <a class="link" href="s01.html#idx_id_7">I</a> <a class="link" href="s01.html#idx_id_8">L</a> <a class="link" href="s01.html#idx_id_9">M</a> <a class="link" href="s01.html#idx_id_11">O</a> <a class="link" href="s01.html#idx_id_12">P</a> <a class="link" href="s01.html#idx_id_13">R</a> <a class="link" href="s01.html#idx_id_14">S</a> <a class="link" href="s01.html#idx_id_15">T</a> <a class="link" href="s01.html#idx_id_17">V</a> <a class="link" href="s01.html#idx_id_18">Z</a></p> +<div class="variablelist"><dl class="variablelist"> +<dt> +<a name="idx_id_0"></a><span class="term">A</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">abs</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">add</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/mixed.html" title="Mixed Precision Arithmetic"><span class="index-entry-level-1">Mixed Precision Arithmetic</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../map/todo.html" title="TODO"><span class="index-entry-level-1">TODO</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">assign</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">assign_components</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_1"></a><span class="term">B</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">bits</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/random.html" title="Generating Random Numbers"><span class="index-entry-level-1">Generating Random Numbers</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/input_output.html" title="Input Output"><span class="index-entry-level-1">Input Output</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rounding.html" title="Rounding Rules for Conversions"><span class="index-entry-level-1">Rounding Rules for Conversions</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits<> constants"><span class="index-entry-level-1">std::numeric_limits<> constants</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">bit_flip</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">bit_set</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">bit_test</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">bit_unset</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +</ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_2"></a><span class="term">C</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">compare</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li></ul></div></dd> +<dt> +<a name="idx_id_3"></a><span class="term">D</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">data</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/float128.html" title="float128"><span class="index-entry-level-1">float128</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/gmp_int.html" title="gmp_int"><span class="index-entry-level-1">gmp_int</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational"><span class="index-entry-level-1">gmp_rational</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">default_precision</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">divide_qr</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +</ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_4"></a><span class="term">E</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">empty</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_acos</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_add</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_asin</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_atan</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_atan2</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_bitwise_and</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_bitwise_or</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_bitwise_xor</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_bit_flip</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_bit_set</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_bit_test</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_bit_unset</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_ceil</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_complement</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_convert_to</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_cos</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_cosh</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_decrement</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_divide</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_eq</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_exp</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_fabs</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_floor</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_fmod</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_frexp</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_gcd</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_get_sign</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_gt</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_increment</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_integer_sqrt</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_is_zero</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_lcm</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_ldexp</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_left_shift</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_log</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_log10</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_lt</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_modulus</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_msb</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_multiply</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_multiply_add</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_multiply_subtract</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_pow</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_powm</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_qr</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_right_shift</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_round</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_scalbn</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_sin</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_sinh</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_sqrt</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_subtract</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_tan</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_tanh</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_trunc</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_5"></a><span class="term">F</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">fpclassify</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li></ul></div></dd> +<dt> +<a name="idx_id_7"></a><span class="term">I</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">if</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/primetest.html" title="Primality Testing"><span class="index-entry-level-1">Primality Testing</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">ilogb</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">in</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">infinity</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits<> functions"><span class="index-entry-level-1">std::numeric_limits<> functions</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">integer_modulus</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">iround</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">isfinite</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">isinf</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">isnan</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">isnormal</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">itrunc</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_8"></a><span class="term">L</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">llround</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">lltrunc</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">log_postfix_event</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/misc/logged_adaptor.html" title="logged_adaptor"><span class="index-entry-level-1">logged_adaptor</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">log_prefix_event</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/misc/logged_adaptor.html" title="logged_adaptor"><span class="index-entry-level-1">logged_adaptor</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">lround</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">lsb</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">ltrunc</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_9"></a><span class="term">M</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">max</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits<> constants"><span class="index-entry-level-1">std::numeric_limits<> constants</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits<> functions"><span class="index-entry-level-1">std::numeric_limits<> functions</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">miller_rabin_test</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/primetest.html" title="Primality Testing"><span class="index-entry-level-1">Primality Testing</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">min</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits<> functions"><span class="index-entry-level-1">std::numeric_limits<> functions</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">msb</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">multiply</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/mixed.html" title="Mixed Precision Arithmetic"><span class="index-entry-level-1">Mixed Precision Arithmetic</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +</ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_11"></a><span class="term">O</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">overlap</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div> +</li></ul></div></dd> +<dt> +<a name="idx_id_12"></a><span class="term">P</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">powm</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">precision</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../map/faq.html" title="FAQ"><span class="index-entry-level-1">FAQ</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../intro.html" title="Introduction"><span class="index-entry-level-1">Introduction</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">proper_subset</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_13"></a><span class="term">R</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">r</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/egs/bitops.html" title="Bit Operations"><span class="index-entry-level-1">Bit Operations</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">round</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_14"></a><span class="term">S</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">sign</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">singleton</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">sqrt</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits<> functions"><span class="index-entry-level-1">std::numeric_limits<> functions</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">str</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">subset</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">subtract</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/mixed.html" title="Mixed Precision Arithmetic"><span class="index-entry-level-1">Mixed Precision Arithmetic</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">swap</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_15"></a><span class="term">T</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">trunc</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">two</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits<> constants"><span class="index-entry-level-1">std::numeric_limits<> constants</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_17"></a><span class="term">V</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">value</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/cpp_bin_float_ref.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits<> functions"><span class="index-entry-level-1">std::numeric_limits<> functions</span></a></p></li> +</ul></div> +</li></ul></div></dd> +<dt> +<a name="idx_id_18"></a><span class="term">Z</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">zero</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/gmp_int.html" title="gmp_int"><span class="index-entry-level-1">gmp_int</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational"><span class="index-entry-level-1">gmp_rational</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits<> constants"><span class="index-entry-level-1">std::numeric_limits<> constants</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/tommath_rational.html" title="tommath_rational"><span class="index-entry-level-1">tommath_rational</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/tom_int.html" title="tom_int"><span class="index-entry-level-1">tom_int</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">zero_in</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div> +</li> +</ul></div></dd> +</dl></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../indexes.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.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="s02.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/indexes/s02.html b/libs/multiprecision/doc/html/boost_multiprecision/indexes/s02.html new file mode 100644 index 0000000000..4833265295 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/indexes/s02.html @@ -0,0 +1,156 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Class Index</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../indexes.html" title="Indexes"> +<link rel="prev" href="s01.html" title="Function Index"> +<link rel="next" href="s03.html" title="Typedef Index"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="s01.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.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="s03.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="idm1549437632"></a>Class Index</h3></div></div></div> +<p><a class="link" href="s02.html#idx_id_21">C</a> <a class="link" href="s02.html#idx_id_22">D</a> <a class="link" href="s02.html#idx_id_23">E</a> <a class="link" href="s02.html#idx_id_24">F</a> <a class="link" href="s02.html#idx_id_25">G</a> <a class="link" href="s02.html#idx_id_26">I</a> <a class="link" href="s02.html#idx_id_27">L</a> <a class="link" href="s02.html#idx_id_28">M</a> <a class="link" href="s02.html#idx_id_29">N</a> <a class="link" href="s02.html#idx_id_34">T</a></p> +<div class="variablelist"><dl class="variablelist"> +<dt> +<a name="idx_id_21"></a><span class="term">C</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">component_type</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-0">cpp_bin_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_dec_float.html" title="cpp_dec_float"><span class="index-entry-level-0">cpp_dec_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_int_backend</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_22"></a><span class="term">D</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/misc/debug_adaptor.html" title="debug_adaptor"><span class="index-entry-level-0">debug_adaptor</span></a></p></li></ul></div></dd> +<dt> +<a name="idx_id_23"></a><span class="term">E</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">expression_template_default</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li></ul></div></dd> +<dt> +<a name="idx_id_24"></a><span class="term">F</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">float128_backend</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/float128.html" title="float128"><span class="index-entry-level-1">float128</span></a></p></li></ul></div> +</li></ul></div></dd> +<dt> +<a name="idx_id_25"></a><span class="term">G</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-0">gmp_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/gmp_int.html" title="gmp_int"><span class="index-entry-level-0">gmp_int</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational"><span class="index-entry-level-0">gmp_rational</span></a></p></li> +</ul></div></dd> +<dt> +<a name="idx_id_26"></a><span class="term">I</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">is_explicitly_convertible</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">Internal Support Code</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">is_lossy_conversion</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">Internal Support Code</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">is_number</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">is_number_expression</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">is_restricted_conversion</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">Internal Support Code</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">is_signed_number</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">Internal Support Code</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">is_unsigned_number</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">Internal Support Code</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_27"></a><span class="term">L</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/misc/logged_adaptor.html" title="logged_adaptor"><span class="index-entry-level-0">logged_adaptor</span></a></p></li></ul></div></dd> +<dt> +<a name="idx_id_28"></a><span class="term">M</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpfi_float_backend</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpfr_float_backend</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_backend</span></a></strong></span></p></li> +</ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_29"></a><span class="term">N</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-0">number</span></a></p></li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">number_category</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_34"></a><span class="term">T</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">tommath_int</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/tom_int.html" title="tom_int"><span class="index-entry-level-1">tom_int</span></a></p></li></ul></div> +</li></ul></div></dd> +</dl></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="s01.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.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="s03.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/indexes/s03.html b/libs/multiprecision/doc/html/boost_multiprecision/indexes/s03.html new file mode 100644 index 0000000000..071d5bfb4e --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/indexes/s03.html @@ -0,0 +1,316 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Typedef Index</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../indexes.html" title="Indexes"> +<link rel="prev" href="s02.html" title="Class Index"> +<link rel="next" href="s04.html" title="Index"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="s02.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.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="s04.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="idm1549381056"></a>Typedef Index</h3></div></div></div> +<p><a class="link" href="s03.html#idx_id_40">C</a> <a class="link" href="s03.html#idx_id_43">F</a> <a class="link" href="s03.html#idx_id_45">I</a> <a class="link" href="s03.html#idx_id_46">L</a> <a class="link" href="s03.html#idx_id_47">M</a> <a class="link" href="s03.html#idx_id_52">S</a> <a class="link" href="s03.html#idx_id_53">T</a> <a class="link" href="s03.html#idx_id_54">U</a></p> +<div class="variablelist"><dl class="variablelist"> +<dt> +<a name="idx_id_40"></a><span class="term">C</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">checked_cpp_int</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">checked_cpp_rational</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">checked_cpp_rational_backend</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">checked_int1024_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">checked_int128_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">checked_int256_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">checked_int512_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">checked_uint1024_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">checked_uint128_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">checked_uint256_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">checked_uint512_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_bin_float_100</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_bin_float_50</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_bin_float_double</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_bin_float_double_extended</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_bin_float_quad</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_bin_float_single</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_dec_float_100</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_dec_float.html" title="cpp_dec_float"><span class="index-entry-level-1">cpp_dec_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_dec_float_50</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_dec_float.html" title="cpp_dec_float"><span class="index-entry-level-1">cpp_dec_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits<> constants"><span class="index-entry-level-1">std::numeric_limits<> constants</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits<> functions"><span class="index-entry-level-1">std::numeric_limits<> functions</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-0">cpp_int</span></a></p></li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_rational</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/rational/cpp_rational.html" title="cpp_rational"><span class="index-entry-level-1">cpp_rational</span></a></strong></span></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_rational_backend</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/cpp_rational.html" title="cpp_rational"><span class="index-entry-level-1">cpp_rational</span></a></p></li> +</ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_43"></a><span class="term">F</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">float128</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/floats/float128.html" title="float128"><span class="index-entry-level-1">float128</span></a></strong></span></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits<> constants"><span class="index-entry-level-1">std::numeric_limits<> constants</span></a></p></li> +</ul></div> +</li></ul></div></dd> +<dt> +<a name="idx_id_45"></a><span class="term">I</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">int1024_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">int128_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">int256_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">int512_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">int_type</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/primetest.html" title="Primality Testing"><span class="index-entry-level-1">Primality Testing</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_46"></a><span class="term">L</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">limb_type</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li></ul></div></dd> +<dt> +<a name="idx_id_47"></a><span class="term">M</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-0">mpfi_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpfi_float_1000</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpfi_float_50</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpfr_float</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></strong></span></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_backend</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpfr_float_100</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_backend</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpfr_float_1000</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_backend</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpfr_float_50</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_backend</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpfr_float_500</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_backend</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpf_float</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpf_float_100</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpf_float_1000</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpf_float_50</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpf_float_500</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpq_rational</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational"><span class="index-entry-level-1">gmp_rational</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpz_int</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/gmp_int.html" title="gmp_int"><span class="index-entry-level-1">gmp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mp_type</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/fp_eg/gi.html" title="Calculating an Integral"><span class="index-entry-level-1">Calculating an Integral</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/fp_eg/poly_eg.html" title="Polynomial Evaluation"><span class="index-entry-level-1">Polynomial Evaluation</span></a></p></li> +</ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_52"></a><span class="term">S</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">static_mpfr_float_100</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">static_mpfr_float_50</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_53"></a><span class="term">T</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/tommath_rational.html" title="tommath_rational"><span class="index-entry-level-0">tommath_rational</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/tom_int.html" title="tom_int"><span class="index-entry-level-0">tom_int</span></a></p></li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">tom_rational</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/tommath_rational.html" title="tommath_rational"><span class="index-entry-level-1">tommath_rational</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_54"></a><span class="term">U</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">uint1024_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">uint128_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">uint256_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">uint512_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +</ul></div></dd> +</dl></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="s02.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.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="s04.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/indexes/s04.html b/libs/multiprecision/doc/html/boost_multiprecision/indexes/s04.html new file mode 100644 index 0000000000..5ed87b4e90 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/indexes/s04.html @@ -0,0 +1,1370 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Index</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../indexes.html" title="Indexes"> +<link rel="prev" href="s03.html" title="Typedef Index"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="s03.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.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> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="idm1549250240"></a>Index</h3></div></div></div> +<p><a class="link" href="s04.html#idx_id_57">A</a> <a class="link" href="s04.html#idx_id_58">B</a> <a class="link" href="s04.html#idx_id_59">C</a> <a class="link" href="s04.html#idx_id_60">D</a> <a class="link" href="s04.html#idx_id_61">E</a> <a class="link" href="s04.html#idx_id_62">F</a> <a class="link" href="s04.html#idx_id_63">G</a> <a class="link" href="s04.html#idx_id_64">I</a> <a class="link" href="s04.html#idx_id_65">L</a> <a class="link" href="s04.html#idx_id_66">M</a> <a class="link" href="s04.html#idx_id_67">N</a> <a class="link" href="s04.html#idx_id_68">O</a> <a class="link" href="s04.html#idx_id_69">P</a> <a class="link" href="s04.html#idx_id_70">R</a> <a class="link" href="s04.html#idx_id_71">S</a> <a class="link" href="s04.html#idx_id_72">T</a> <a class="link" href="s04.html#idx_id_73">U</a> <a class="link" href="s04.html#idx_id_74">V</a> <a class="link" href="s04.html#idx_id_75">Z</a></p> +<div class="variablelist"><dl class="variablelist"> +<dt> +<a name="idx_id_57"></a><span class="term">A</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">abs</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">add</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/mixed.html" title="Mixed Precision Arithmetic"><span class="index-entry-level-1">Mixed Precision Arithmetic</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../map/todo.html" title="TODO"><span class="index-entry-level-1">TODO</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">assign</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">assign_components</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_58"></a><span class="term">B</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">Bit Operations</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/egs/bitops.html" title="Bit Operations"><span class="index-entry-level-1">r</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">bits</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/random.html" title="Generating Random Numbers"><span class="index-entry-level-1">Generating Random Numbers</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/input_output.html" title="Input Output"><span class="index-entry-level-1">Input Output</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rounding.html" title="Rounding Rules for Conversions"><span class="index-entry-level-1">Rounding Rules for Conversions</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits<> constants"><span class="index-entry-level-1">std::numeric_limits<> constants</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">bit_flip</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">bit_set</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">bit_test</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">bit_unset</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">BOOST_MP_DEFINE_SIZED_CPP_INT_LITERAL</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/lits.html" title="Literal Types and constexpr Support"><span class="index-entry-level-1">Literal Types and constexpr Support</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">BOOST_MP_MIN_EXPONENT_DIGITS</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/input_output.html" title="Input Output"><span class="index-entry-level-1">Input Output</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">BOOST_MP_USE_FLOAT128</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/float128.html" title="float128"><span class="index-entry-level-1">float128</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">BOOST_MP_USE_QUAD</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/float128.html" title="float128"><span class="index-entry-level-1">float128</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_59"></a><span class="term">C</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">Calculating an Integral</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/fp_eg/gi.html" title="Calculating an Integral"><span class="index-entry-level-1">mp_type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">checked_cpp_int</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">checked_cpp_rational</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">checked_cpp_rational_backend</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">checked_int1024_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">checked_int128_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">checked_int256_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">checked_int512_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">checked_uint1024_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">checked_uint128_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">checked_uint256_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">checked_uint512_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">compare</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">component_type</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">Compulsory Requirements on the Backend type.</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_add</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_bitwise_or</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_bitwise_xor</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_ceil</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_complement</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_convert_to</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_divide</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_floor</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_frexp</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_ldexp</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_left_shift</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_modulus</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_multiply</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_right_shift</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_sqrt</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_subtract</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_bin_float</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></strong></span></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float_100</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float_50</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float_double</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float_double_extended</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float_quad</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float_single</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/cpp_bin_float_ref.html" title="cpp_bin_float"><span class="index-entry-level-1">value</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_bin_float_100</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_bin_float_50</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_bin_float_double</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_bin_float_double_extended</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_bin_float_quad</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_bin_float_single</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_dec_float</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/floats/cpp_dec_float.html" title="cpp_dec_float"><span class="index-entry-level-1">cpp_dec_float</span></a></strong></span></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_dec_float.html" title="cpp_dec_float"><span class="index-entry-level-1">cpp_dec_float_100</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_dec_float.html" title="cpp_dec_float"><span class="index-entry-level-1">cpp_dec_float_50</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_dec_float_100</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_dec_float.html" title="cpp_dec_float"><span class="index-entry-level-1">cpp_dec_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_dec_float_50</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_dec_float.html" title="cpp_dec_float"><span class="index-entry-level-1">cpp_dec_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits<> constants"><span class="index-entry-level-1">std::numeric_limits<> constants</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits<> functions"><span class="index-entry-level-1">std::numeric_limits<> functions</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_int</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">checked_cpp_int</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">checked_cpp_rational</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">checked_cpp_rational_backend</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">checked_int1024_t</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">checked_int128_t</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">checked_int256_t</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">checked_int512_t</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">checked_uint1024_t</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">checked_uint128_t</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">checked_uint256_t</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">checked_uint512_t</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></strong></span></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int_backend</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_rational</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_rational_backend</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">int1024_t</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">int128_t</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">int256_t</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">int512_t</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">limb_type</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">uint1024_t</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">uint128_t</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">uint256_t</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">uint512_t</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_int_backend</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_rational</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/rational/cpp_rational.html" title="cpp_rational"><span class="index-entry-level-1">cpp_rational</span></a></strong></span></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/cpp_rational.html" title="cpp_rational"><span class="index-entry-level-1">cpp_rational_backend</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">cpp_rational_backend</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/cpp_rational.html" title="cpp_rational"><span class="index-entry-level-1">cpp_rational</span></a></p></li> +</ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_60"></a><span class="term">D</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">data</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/float128.html" title="float128"><span class="index-entry-level-1">float128</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/gmp_int.html" title="gmp_int"><span class="index-entry-level-1">gmp_int</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational"><span class="index-entry-level-1">gmp_rational</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/misc/debug_adaptor.html" title="debug_adaptor"><span class="index-entry-level-0">debug_adaptor</span></a></p></li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">default_precision</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">divide_qr</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +</ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_61"></a><span class="term">E</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">empty</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_acos</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_add</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_asin</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_atan</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_atan2</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_bitwise_and</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_bitwise_or</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_bitwise_xor</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_bit_flip</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_bit_set</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_bit_test</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_bit_unset</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_ceil</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_complement</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_convert_to</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_cos</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_cosh</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_decrement</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_divide</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_eq</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_exp</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_fabs</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_floor</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_fmod</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_frexp</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_gcd</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_get_sign</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_gt</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_increment</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_integer_sqrt</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_is_zero</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_lcm</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_ldexp</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_left_shift</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_log</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_log10</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_lt</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_modulus</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_msb</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_multiply</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_multiply_add</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_multiply_subtract</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_pow</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_powm</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_qr</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_right_shift</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_round</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_scalbn</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_sin</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_sinh</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_sqrt</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_subtract</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table 1.8. Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_tan</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_tanh</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">eval_trunc</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">expression_template_default</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_62"></a><span class="term">F</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">FAQ</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../map/faq.html" title="FAQ"><span class="index-entry-level-1">precision</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">float128</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/float128.html" title="float128"><span class="index-entry-level-1">BOOST_MP_USE_FLOAT128</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/float128.html" title="float128"><span class="index-entry-level-1">BOOST_MP_USE_QUAD</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/float128.html" title="float128"><span class="index-entry-level-1">data</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/floats/float128.html" title="float128"><span class="index-entry-level-1">float128</span></a></strong></span></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/float128.html" title="float128"><span class="index-entry-level-1">float128_backend</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits<> constants"><span class="index-entry-level-1">std::numeric_limits<> constants</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">float128_backend</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/float128.html" title="float128"><span class="index-entry-level-1">float128</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">fpclassify</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_63"></a><span class="term">G</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">Generating Random Numbers</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/random.html" title="Generating Random Numbers"><span class="index-entry-level-1">bits</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">Generic Integer Operations</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">add</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">bit_flip</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">bit_set</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">bit_test</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">bit_unset</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">divide_qr</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">integer_modulus</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">lsb</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">miller_rabin_test</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">msb</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">multiply</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">powm</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">precision</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">sqrt</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">subtract</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">gmp_float</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">data</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></strong></span></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">mpf_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">mpf_float_100</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">mpf_float_1000</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">mpf_float_50</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">mpf_float_500</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">zero</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">gmp_int</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/gmp_int.html" title="gmp_int"><span class="index-entry-level-1">data</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/ints/gmp_int.html" title="gmp_int"><span class="index-entry-level-1">gmp_int</span></a></strong></span></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/gmp_int.html" title="gmp_int"><span class="index-entry-level-1">mpz_int</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/gmp_int.html" title="gmp_int"><span class="index-entry-level-1">zero</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">gmp_rational</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational"><span class="index-entry-level-1">data</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational"><span class="index-entry-level-1">gmp_rational</span></a></strong></span></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational"><span class="index-entry-level-1">mpq_rational</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational"><span class="index-entry-level-1">zero</span></a></p></li> +</ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_64"></a><span class="term">I</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">if</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/primetest.html" title="Primality Testing"><span class="index-entry-level-1">Primality Testing</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">ilogb</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">in</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">infinity</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits<> functions"><span class="index-entry-level-1">std::numeric_limits<> functions</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">Input Output</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/input_output.html" title="Input Output"><span class="index-entry-level-1">bits</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/input_output.html" title="Input Output"><span class="index-entry-level-1">BOOST_MP_MIN_EXPONENT_DIGITS</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">int1024_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">int128_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">int256_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">int512_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">integer_modulus</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">Internal Support Code</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">is_explicitly_convertible</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">is_lossy_conversion</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">is_restricted_conversion</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">is_signed_number</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">is_unsigned_number</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">Introduction</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../intro.html" title="Introduction"><span class="index-entry-level-1">precision</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">int_type</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/primetest.html" title="Primality Testing"><span class="index-entry-level-1">Primality Testing</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">iround</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">isfinite</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">isinf</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">isnan</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">isnormal</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">is_explicitly_convertible</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">Internal Support Code</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">is_lossy_conversion</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">Internal Support Code</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">is_number</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">is_number_expression</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">is_restricted_conversion</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">Internal Support Code</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">is_signed_number</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">Internal Support Code</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">is_unsigned_number</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">Internal Support Code</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">itrunc</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_65"></a><span class="term">L</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">limb_type</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">Literal Types and constexpr Support</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/lits.html" title="Literal Types and constexpr Support"><span class="index-entry-level-1">BOOST_MP_DEFINE_SIZED_CPP_INT_LITERAL</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">llround</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">lltrunc</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">logged_adaptor</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/misc/logged_adaptor.html" title="logged_adaptor"><span class="index-entry-level-1">logged_adaptor</span></a></strong></span></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/misc/logged_adaptor.html" title="logged_adaptor"><span class="index-entry-level-1">log_postfix_event</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/misc/logged_adaptor.html" title="logged_adaptor"><span class="index-entry-level-1">log_prefix_event</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">log_postfix_event</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/misc/logged_adaptor.html" title="logged_adaptor"><span class="index-entry-level-1">logged_adaptor</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">log_prefix_event</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/misc/logged_adaptor.html" title="logged_adaptor"><span class="index-entry-level-1">logged_adaptor</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">lround</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">lsb</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">ltrunc</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_66"></a><span class="term">M</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">max</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits<> constants"><span class="index-entry-level-1">std::numeric_limits<> constants</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits<> functions"><span class="index-entry-level-1">std::numeric_limits<> functions</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">miller_rabin_test</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/primetest.html" title="Primality Testing"><span class="index-entry-level-1">Primality Testing</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">min</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits<> functions"><span class="index-entry-level-1">std::numeric_limits<> functions</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">Mixed Precision Arithmetic</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/mixed.html" title="Mixed Precision Arithmetic"><span class="index-entry-level-1">add</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/mixed.html" title="Mixed Precision Arithmetic"><span class="index-entry-level-1">multiply</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/mixed.html" title="Mixed Precision Arithmetic"><span class="index-entry-level-1">subtract</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpfi_float</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">data</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">empty</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">in</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></strong></span></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float_1000</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float_50</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float_backend</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">overlap</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">proper_subset</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">singleton</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">subset</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">zero_in</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpfi_float_1000</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpfi_float_50</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpfi_float_backend</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpfr_float</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">data</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></strong></span></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float_100</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float_1000</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float_50</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float_500</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float_backend</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">static_mpfr_float_100</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">static_mpfr_float_50</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpfr_float_100</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_backend</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpfr_float_1000</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_backend</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpfr_float_50</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_backend</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpfr_float_500</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_backend</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpfr_float_backend</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_100</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_1000</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_50</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_500</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_backend</span></a></strong></span></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpf_float</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpf_float_100</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpf_float_1000</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpf_float_50</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpf_float_500</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpq_rational</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational"><span class="index-entry-level-1">gmp_rational</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mpz_int</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/gmp_int.html" title="gmp_int"><span class="index-entry-level-1">gmp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">mp_type</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/fp_eg/gi.html" title="Calculating an Integral"><span class="index-entry-level-1">Calculating an Integral</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/fp_eg/poly_eg.html" title="Polynomial Evaluation"><span class="index-entry-level-1">Polynomial Evaluation</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">msb</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">multiply</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/mixed.html" title="Mixed Precision Arithmetic"><span class="index-entry-level-1">Mixed Precision Arithmetic</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +</ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_67"></a><span class="term">N</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">number</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">abs</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">add</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">assign</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">bit_flip</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">bit_set</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">bit_test</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">bit_unset</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">compare</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">component_type</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">default_precision</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">divide_qr</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">expression_template_default</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">fpclassify</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">ilogb</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">integer_modulus</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">iround</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">isfinite</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">isinf</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">isnan</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">isnormal</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">is_number</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">is_number_expression</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">itrunc</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">llround</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">lltrunc</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">lround</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">lsb</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">ltrunc</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">miller_rabin_test</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">msb</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">multiply</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></strong></span></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number_category</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">powm</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">precision</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">round</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">sign</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">sqrt</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">str</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">subtract</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">swap</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">trunc</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">value</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">number_category</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_68"></a><span class="term">O</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">Optional Requirements on the Backend Type</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">assign_components</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_acos</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_add</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_asin</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_atan</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_atan2</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_bitwise_and</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_bitwise_or</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_bitwise_xor</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_bit_flip</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_bit_set</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_bit_test</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_bit_unset</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_cos</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_cosh</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_decrement</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_divide</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_eq</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_exp</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_fabs</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_fmod</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_gcd</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_get_sign</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_gt</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_increment</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_integer_sqrt</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_is_zero</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_lcm</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_left_shift</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_log</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_log10</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_lt</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_modulus</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_msb</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_multiply</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_multiply_add</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_multiply_subtract</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_pow</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_powm</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_qr</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_right_shift</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_round</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_scalbn</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_sin</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_sinh</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_subtract</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_tan</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_tanh</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table 1.9. Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_trunc</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">overlap</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_69"></a><span class="term">P</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">Polynomial Evaluation</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/fp_eg/poly_eg.html" title="Polynomial Evaluation"><span class="index-entry-level-1">mp_type</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">powm</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">precision</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../map/faq.html" title="FAQ"><span class="index-entry-level-1">FAQ</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../intro.html" title="Introduction"><span class="index-entry-level-1">Introduction</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">Primality Testing</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/primetest.html" title="Primality Testing"><span class="index-entry-level-1">if</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/primetest.html" title="Primality Testing"><span class="index-entry-level-1">int_type</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/primetest.html" title="Primality Testing"><span class="index-entry-level-1">miller_rabin_test</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">proper_subset</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_70"></a><span class="term">R</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">r</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/egs/bitops.html" title="Bit Operations"><span class="index-entry-level-1">Bit Operations</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">round</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">Rounding Rules for Conversions</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rounding.html" title="Rounding Rules for Conversions"><span class="index-entry-level-1">bits</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_71"></a><span class="term">S</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">sign</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">singleton</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">sqrt</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits<> functions"><span class="index-entry-level-1">std::numeric_limits<> functions</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">static_mpfr_float_100</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">static_mpfr_float_50</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">std::numeric_limits<> constants</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits<> constants"><span class="index-entry-level-1">bits</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits<> constants"><span class="index-entry-level-1">cpp_dec_float_50</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits<> constants"><span class="index-entry-level-1">float128</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits<> constants"><span class="index-entry-level-1">max</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits<> constants"><span class="index-entry-level-1">two</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits<> constants"><span class="index-entry-level-1">zero</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">std::numeric_limits<> functions</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits<> functions"><span class="index-entry-level-1">cpp_dec_float_50</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits<> functions"><span class="index-entry-level-1">infinity</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits<> functions"><span class="index-entry-level-1">max</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits<> functions"><span class="index-entry-level-1">min</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits<> functions"><span class="index-entry-level-1">sqrt</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits<> functions"><span class="index-entry-level-1">value</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">str</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">subset</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">subtract</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/mixed.html" title="Mixed Precision Arithmetic"><span class="index-entry-level-1">Mixed Precision Arithmetic</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">swap</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_72"></a><span class="term">T</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">TODO</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../map/todo.html" title="TODO"><span class="index-entry-level-1">add</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">tommath_int</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/tom_int.html" title="tom_int"><span class="index-entry-level-1">tom_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">tommath_rational</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/rational/tommath_rational.html" title="tommath_rational"><span class="index-entry-level-1">tommath_rational</span></a></strong></span></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/tommath_rational.html" title="tommath_rational"><span class="index-entry-level-1">tom_rational</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/tommath_rational.html" title="tommath_rational"><span class="index-entry-level-1">zero</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">tom_int</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/tom_int.html" title="tom_int"><span class="index-entry-level-1">tommath_int</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/ints/tom_int.html" title="tom_int"><span class="index-entry-level-1">tom_int</span></a></strong></span></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/tom_int.html" title="tom_int"><span class="index-entry-level-1">zero</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">tom_rational</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/tommath_rational.html" title="tommath_rational"><span class="index-entry-level-1">tommath_rational</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">trunc</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">two</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits<> constants"><span class="index-entry-level-1">std::numeric_limits<> constants</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_73"></a><span class="term">U</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">uint1024_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">uint128_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">uint256_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">uint512_t</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div> +</li> +</ul></div></dd> +<dt> +<a name="idx_id_74"></a><span class="term">V</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">value</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/cpp_bin_float_ref.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits<> functions"><span class="index-entry-level-1">std::numeric_limits<> functions</span></a></p></li> +</ul></div> +</li></ul></div></dd> +<dt> +<a name="idx_id_75"></a><span class="term">Z</span> +</dt> +<dd><div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">zero</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/gmp_int.html" title="gmp_int"><span class="index-entry-level-1">gmp_int</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational"><span class="index-entry-level-1">gmp_rational</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits<> constants"><span class="index-entry-level-1">std::numeric_limits<> constants</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/tommath_rational.html" title="tommath_rational"><span class="index-entry-level-1">tommath_rational</span></a></p></li> +<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/tom_int.html" title="tom_int"><span class="index-entry-level-1">tom_int</span></a></p></li> +</ul></div> +</li> +<li class="listitem" style="list-style-type: none"> +<p><span class="index-entry-level-0">zero_in</span></p> +<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div> +</li> +</ul></div></dd> +</dl></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="s03.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.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> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/intro.html b/libs/multiprecision/doc/html/boost_multiprecision/intro.html new file mode 100644 index 0000000000..d19421baac --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/intro.html @@ -0,0 +1,710 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Introduction</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="prev" href="../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="next" href="tut.html" title="Tutorial"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="tut.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="boost_multiprecision.intro"></a><a class="link" href="intro.html" title="Introduction">Introduction</a> +</h2></div></div></div> +<p> + The Multiprecision Library provides <a class="link" href="tut/ints.html" title="Integer Types">integer</a>, + <a class="link" href="tut/rational.html" title="Rational Number Types">rational</a> and <a class="link" href="tut/floats.html" title="Floating Point Numbers">floating-point</a> types in C++ + that have more range and precision than C++'s ordinary built-in types. The + big number types in Multiprecision can be used with a wide selection of basic + mathematical operations, elementary transcendental functions as well as the + functions in Boost.Math. The Multiprecision types can also interoperate with + the built-in types in C++ using clearly defined conversion rules. This allows + Boost.Multiprecision to be used for all kinds of mathematical calculations + involving integer, rational and floating-point types requiring extended range + and precision. + </p> +<p> + Multiprecision consists of a generic interface to the mathematics of large + numbers as well as a selection of big number back ends, with support for integer, + rational and floating-point types. Boost.Multiprecision provides a selection + of back ends provided off-the-rack in including interfaces to GMP, MPFR, MPIR, + TomMath as well as its own collection of Boost-licensed, header-only back ends + for integers, rationals and floats. In addition, user-defined back ends can + be created and used with the interface of Multiprecision, provided the class + implementation adheres to the necessary <a class="link" href="ref/backendconc.html" title="Backend Requirements">concepts</a>. + </p> +<p> + Depending upon the number type, precision may be arbitrarily large (limited + only by available memory), fixed at compile time (for example 50 or 100 decimal + digits), or a variable controlled at run-time by member functions. The types + are expression-template-enabled for better performance than naive user-defined + types. + </p> +<p> + The Multiprecision library comes in two distinct parts: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + An expression-template-enabled front-end <code class="computeroutput"><span class="identifier">number</span></code> + that handles all the operator overloading, expression evaluation optimization, + and code reduction. + </li> +<li class="listitem"> + A selection of back-ends that implement the actual arithmetic operations, + and need conform only to the reduced interface requirements of the front-end. + </li> +</ul></div> +<p> + Separation of front-end and back-end allows use of highly refined, but restricted + license libraries where possible, but provides Boost license alternatives for + users who must have a portable unconstrained license. Which is to say some + back-ends rely on 3rd party libraries, but a header-only Boost license version + is always available (if somewhat slower). + </p> +<p> + Should you just wish to cut to the chase and use a fully Boost-licensed number + type, then skip to <a class="link" href="tut/ints/cpp_int.html" title="cpp_int">cpp_int</a> + for multiprecision integers, <a class="link" href="tut/floats/cpp_dec_float.html" title="cpp_dec_float">cpp_dec_float</a> + for multiprecision floating point types and <a class="link" href="tut/rational/cpp_rational.html" title="cpp_rational">cpp_rational</a> + for rational types. + </p> +<p> + The library is often used via one of the predefined typedefs: for example if + you wanted an <a href="http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic" target="_top">arbitrary + precision</a> integer type using <a href="http://gmplib.org" target="_top">GMP</a> + as the underlying implementation then you could use: + </p> +<pre class="programlisting"><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">gmp</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> <span class="comment">// Defines the wrappers around the GMP library's types</span> + +<span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">mpz_int</span> <span class="identifier">myint</span><span class="special">;</span> <span class="comment">// Arbitrary precision integer type.</span> +</pre> +<p> + Alternatively, you can compose your own multiprecision type, by combining + <code class="computeroutput"><span class="identifier">number</span></code> with one of the predefined + back-end types. For example, suppose you wanted a 300 decimal digit floating-point + type based on the <a href="http://www.mpfr.org" target="_top">MPFR</a> library. In + this case, there's no predefined typedef with that level of precision, so instead + we compose our own: + </p> +<pre class="programlisting"><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">mpfr</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> <span class="comment">// Defines the Backend type that wraps MPFR</span> + +<span class="keyword">namespace</span> <span class="identifier">mp</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="comment">// Reduce the typing a bit later...</span> + +<span class="keyword">typedef</span> <span class="identifier">mp</span><span class="special">::</span><span class="identifier">number</span><span class="special"><</span><span class="identifier">mp</span><span class="special">::</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="number">300</span><span class="special">></span> <span class="special">></span> <span class="identifier">my_float</span><span class="special">;</span> + +<span class="identifier">my_float</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">,</span> <span class="identifier">c</span><span class="special">;</span> <span class="comment">// These variables have 300 decimal digits precision</span> +</pre> +<p> + We can repeat the above example, but with the expression templates disabled + (for faster compile times, but slower runtimes) by passing a second template + argument to <code class="computeroutput"><span class="identifier">number</span></code>: + </p> +<pre class="programlisting"><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">mpfr</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> <span class="comment">// Defines the Backend type that wraps MPFR</span> + +<span class="keyword">namespace</span> <span class="identifier">mp</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="comment">// Reduce the typing a bit later...</span> + +<span class="keyword">typedef</span> <span class="identifier">mp</span><span class="special">::</span><span class="identifier">number</span><span class="special"><</span><span class="identifier">mp</span><span class="special">::</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="number">300</span><span class="special">>,</span> <span class="identifier">et_off</span><span class="special">></span> <span class="identifier">my_float</span><span class="special">;</span> + +<span class="identifier">my_float</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">,</span> <span class="identifier">c</span><span class="special">;</span> <span class="comment">// These variables have 300 decimal digits precision</span> +</pre> +<p> + We can also mix arithmetic operations between different types, provided there + is an unambiguous implicit conversion from one type to the other: + </p> +<pre class="programlisting"><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_int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> + +<span class="keyword">namespace</span> <span class="identifier">mp</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="comment">// Reduce the typing a bit later...</span> + +<span class="identifier">mp</span><span class="special">::</span><span class="identifier">int128_t</span> <span class="identifier">a</span><span class="special">(</span><span class="number">3</span><span class="special">),</span> <span class="identifier">b</span><span class="special">(</span><span class="number">4</span><span class="special">);</span> +<span class="identifier">mp</span><span class="special">::</span><span class="identifier">int512_t</span> <span class="identifier">c</span><span class="special">(</span><span class="number">50</span><span class="special">),</span> <span class="identifier">d</span><span class="special">;</span> + +<span class="identifier">d</span> <span class="special">=</span> <span class="identifier">c</span> <span class="special">*</span> <span class="identifier">a</span><span class="special">;</span> <span class="comment">// OK, result of mixed arithmetic is an int512_t</span> +</pre> +<p> + Conversions are also allowed: + </p> +<pre class="programlisting"><span class="identifier">d</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span> <span class="comment">// OK, widening conversion.</span> +<span class="identifier">d</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">*</span> <span class="identifier">b</span><span class="special">;</span> <span class="comment">// OK, can convert from an expression template too.</span> +</pre> +<p> + However conversions that are inherently lossy are either declared explicit + or else forbidden altogether: + </p> +<pre class="programlisting"><span class="identifier">d</span> <span class="special">=</span> <span class="number">3.14</span><span class="special">;</span> <span class="comment">// Error implicit conversion from float not allowed.</span> +<span class="identifier">d</span> <span class="special">=</span> <span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">mp</span><span class="special">::</span><span class="identifier">int512_t</span><span class="special">>(</span><span class="number">3.14</span><span class="special">);</span> <span class="comment">// OK explicit construction is allowed</span> +</pre> +<p> + Mixed arithmetic will fail if the conversion is either ambiguous or explicit: + </p> +<pre class="programlisting"><span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><>,</span> <span class="identifier">et_off</span><span class="special">></span> <span class="identifier">a</span><span class="special">(</span><span class="number">2</span><span class="special">);</span> +<span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><>,</span> <span class="identifier">et_on</span><span class="special">></span> <span class="identifier">b</span><span class="special">(</span><span class="number">3</span><span class="special">);</span> + +<span class="identifier">b</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">*</span> <span class="identifier">b</span><span class="special">;</span> <span class="comment">// Error, implicit conversion could go either way.</span> +<span class="identifier">b</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">*</span> <span class="number">3.14</span><span class="special">;</span> <span class="comment">// Error, no operator overload if the conversion would be explicit.</span> +</pre> +<h5> +<a name="boost_multiprecision.intro.h0"></a> + <span class="phrase"><a name="boost_multiprecision.intro.move_semantics"></a></span><a class="link" href="intro.html#boost_multiprecision.intro.move_semantics">Move + Semantics</a> + </h5> +<p> + On compilers that support rvalue-references, class <code class="computeroutput"><span class="identifier">number</span></code> + is move-enabled if the underlying backend is. + </p> +<p> + In addition the non-expression template operator overloads (see below) are + move aware and have overloads that look something like: + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">B</span><span class="special">></span> +<span class="identifier">number</span><span class="special"><</span><span class="identifier">B</span><span class="special">,</span> <span class="identifier">et_off</span><span class="special">></span> <span class="keyword">operator</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">number</span><span class="special"><</span><span class="identifier">B</span><span class="special">,</span> <span class="identifier">et_off</span><span class="special">>&&</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">B</span><span class="special">,</span> <span class="identifier">et_off</span><span class="special">>&</span> <span class="identifier">b</span><span class="special">)</span> +<span class="special">{</span> + <span class="keyword">return</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">a</span> <span class="special">+=</span> <span class="identifier">b</span><span class="special">);</span> +<span class="special">}</span> +</pre> +<p> + These operator overloads ensure that many expressions can be evaluated without + actually generating any temporaries. However, there are still many simple expressions + such as: + </p> +<pre class="programlisting"><span class="identifier">a</span> <span class="special">=</span> <span class="identifier">b</span> <span class="special">*</span> <span class="identifier">c</span><span class="special">;</span> +</pre> +<p> + Which don't noticeably benefit from move support. Therefore, optimal performance + comes from having both move-support, and expression templates enabled. + </p> +<p> + Note that while "moved-from" objects are left in a sane state, they + have an unspecified value, and the only permitted operations on them are destruction + or the assignment of a new value. Any other operation should be considered + a programming error and all of our backends will trigger an assertion if any + other operation is attempted. This behavior allows for optimal performance + on move-construction (i.e. no allocation required, we just take ownership of + the existing object's internal state), while maintaining usability in the standard + library containers. + </p> +<h5> +<a name="boost_multiprecision.intro.h1"></a> + <span class="phrase"><a name="boost_multiprecision.intro.expression_templates"></a></span><a class="link" href="intro.html#boost_multiprecision.intro.expression_templates">Expression + Templates</a> + </h5> +<p> + Class <code class="computeroutput"><span class="identifier">number</span></code> is expression-template-enabled: + that means that rather than having a multiplication operator that looks like + this: + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">></span> +<span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">></span> <span class="keyword">operator</span> <span class="special">*</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">>&</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">>&</span> <span class="identifier">b</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">></span> <span class="identifier">result</span><span class="special">(</span><span class="identifier">a</span><span class="special">);</span> + <span class="identifier">result</span> <span class="special">*=</span> <span class="identifier">b</span><span class="special">;</span> + <span class="keyword">return</span> <span class="identifier">result</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + Instead the operator looks more like this: + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">></span> +<span class="emphasis"><em>unmentionable-type</em></span> <span class="keyword">operator</span> <span class="special">*</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">>&</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">>&</span> <span class="identifier">b</span><span class="special">);</span> +</pre> +<p> + Where the "unmentionable" return type is an implementation detail + that, rather than containing the result of the multiplication, contains instructions + on how to compute the result. In effect it's just a pair of references to the + arguments of the function, plus some compile-time information that stores what + the operation is. + </p> +<p> + The great advantage of this method is the <span class="emphasis"><em>elimination of temporaries</em></span>: + for example the "naive" implementation of <code class="computeroutput"><span class="keyword">operator</span><span class="special">*</span></code> above, requires one temporary for computing + the result, and at least another one to return it. It's true that sometimes + this overhead can be reduced by using move-semantics, but it can't be eliminated + completely. For example, lets suppose we're evaluating a polynomial via Horner's + method, something like this: + </p> +<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">a</span><span class="special">[</span><span class="number">7</span><span class="special">]</span> <span class="special">=</span> <span class="special">{</span> <span class="comment">/* some values */</span> <span class="special">};</span> +<span class="comment">//....</span> +<span class="identifier">y</span> <span class="special">=</span> <span class="special">(((((</span><span class="identifier">a</span><span class="special">[</span><span class="number">6</span><span class="special">]</span> <span class="special">*</span> <span class="identifier">x</span> <span class="special">+</span> <span class="identifier">a</span><span class="special">[</span><span class="number">5</span><span class="special">])</span> <span class="special">*</span> <span class="identifier">x</span> <span class="special">+</span> <span class="identifier">a</span><span class="special">[</span><span class="number">4</span><span class="special">])</span> <span class="special">*</span> <span class="identifier">x</span> <span class="special">+</span> <span class="identifier">a</span><span class="special">[</span><span class="number">3</span><span class="special">])</span> <span class="special">*</span> <span class="identifier">x</span> <span class="special">+</span> <span class="identifier">a</span><span class="special">[</span><span class="number">2</span><span class="special">])</span> <span class="special">*</span> <span class="identifier">x</span> <span class="special">+</span> <span class="identifier">a</span><span class="special">[</span><span class="number">1</span><span class="special">])</span> <span class="special">*</span> <span class="identifier">x</span> <span class="special">+</span> <span class="identifier">a</span><span class="special">[</span><span class="number">0</span><span class="special">];</span> +</pre> +<p> + If type <code class="computeroutput"><span class="identifier">T</span></code> is a <code class="computeroutput"><span class="identifier">number</span></code>, then this expression is evaluated + <span class="emphasis"><em>without creating a single temporary value</em></span>. In contrast, + if we were using the <a href="http://math.berkeley.edu/~wilken/code/gmpfrxx/" target="_top">mpfr_class</a> + C++ wrapper for <a href="http://www.mpfr.org" target="_top">MPFR</a> - then this expression + would result in no less than 11 temporaries (this is true even though <a href="http://math.berkeley.edu/~wilken/code/gmpfrxx/" target="_top">mpfr_class</a> does + use expression templates to reduce the number of temporaries somewhat). Had + we used an even simpler wrapper around <a href="http://www.mpfr.org" target="_top">MPFR</a> + like <a href="http://www.holoborodko.com/pavel/mpfr/" target="_top">mpreal</a> things + would have been even worse and no less that 24 temporaries are created for + this simple expression (note - we actually measure the number of memory allocations + performed rather than the number of temporaries directly, note also that the + <a href="http://gmplib.org/manual/C_002b_002b-Interface-Floats.html#C_002b_002b-Interface-Floats" target="_top">mpf_class</a> + wrapper that will be supplied with GMP-5.1 reduces the number of temporaries + to pretty much zero). Note that if we compile with expression templates disabled + and rvalue-reference support on, then actually still have no wasted memory + allocations as even though temporaries are created, their contents are moved + rather than copied. <a href="#ftn.boost_multiprecision.intro.f0" class="footnote" name="boost_multiprecision.intro.f0"><sup class="footnote">[1]</sup></a> + </p> +<div class="important"><table border="0" summary="Important"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../../doc/src/images/important.png"></td> +<th align="left">Important</th> +</tr> +<tr><td align="left" valign="top"> +<p> + Expression templates can radically reorder the operations in an expression, + for example: + </p> +<p> + a = (b * c) * a; + </p> +<p> + Will get transformed into: + </p> +<p> + a *= c; a *= b; + </p> +<p> + If this is likely to be an issue for a particular application, then they + should be disabled. + </p> +</td></tr> +</table></div> +<p> + This library also extends expression template support to standard library functions + like <code class="computeroutput"><span class="identifier">abs</span></code> or <code class="computeroutput"><span class="identifier">sin</span></code> + with <code class="computeroutput"><span class="identifier">number</span></code> arguments. This + means that an expression such as: + </p> +<pre class="programlisting"><span class="identifier">y</span> <span class="special">=</span> <span class="identifier">abs</span><span class="special">(</span><span class="identifier">x</span><span class="special">);</span> +</pre> +<p> + can be evaluated without a single temporary being calculated. Even expressions + like: + </p> +<pre class="programlisting"><span class="identifier">y</span> <span class="special">=</span> <span class="identifier">sin</span><span class="special">(</span><span class="identifier">x</span><span class="special">);</span> +</pre> +<p> + get this treatment, so that variable 'y' is used as "working storage" + within the implementation of <code class="computeroutput"><span class="identifier">sin</span></code>, + thus reducing the number of temporaries used by one. Of course, should you + write: + </p> +<pre class="programlisting"><span class="identifier">x</span> <span class="special">=</span> <span class="identifier">sin</span><span class="special">(</span><span class="identifier">x</span><span class="special">);</span> +</pre> +<p> + Then we clearly can't use <code class="computeroutput"><span class="identifier">x</span></code> + as working storage during the calculation, so then a temporary variable is + created in this case. + </p> +<p> + Given the comments above, you might be forgiven for thinking that expression-templates + are some kind of universal-panacea: sadly though, all tricks like this have + their downsides. For one thing, expression template libraries like this one, + tend to be slower to compile than their simpler cousins, they're also harder + to debug (should you actually want to step through our code!), and rely on + compiler optimizations being turned on to give really good performance. Also, + since the return type from expressions involving <code class="computeroutput"><span class="identifier">number</span></code>s + is an "unmentionable implementation detail", you have to be careful + to cast the result of an expression to the actual number type when passing + an expression to a template function. For example, given: + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">my_proc</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">T</span><span class="special">&);</span> +</pre> +<p> + Then calling: + </p> +<pre class="programlisting"><span class="identifier">my_proc</span><span class="special">(</span><span class="identifier">a</span><span class="special">+</span><span class="identifier">b</span><span class="special">);</span> +</pre> +<p> + Will very likely result in obscure error messages inside the body of <code class="computeroutput"><span class="identifier">my_proc</span></code> - since we've passed it an expression + template type, and not a number type. Instead we probably need: + </p> +<pre class="programlisting"><span class="identifier">my_proc</span><span class="special">(</span><span class="identifier">my_number_type</span><span class="special">(</span><span class="identifier">a</span><span class="special">+</span><span class="identifier">b</span><span class="special">));</span> +</pre> +<p> + Having said that, these situations don't occur that often - or indeed not at + all for non-template functions. In addition, all the functions in the Boost.Math + library will automatically convert expression-template arguments to the underlying + number type without you having to do anything, so: + </p> +<pre class="programlisting"><span class="identifier">mpfr_float_100</span> <span class="identifier">a</span><span class="special">(</span><span class="number">20</span><span class="special">),</span> <span class="identifier">delta</span><span class="special">(</span><span class="number">0.125</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">gamma_p</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">a</span> <span class="special">+</span> <span class="identifier">delta</span><span class="special">);</span> +</pre> +<p> + Will work just fine, with the <code class="computeroutput"><span class="identifier">a</span> <span class="special">+</span> <span class="identifier">delta</span></code> expression + template argument getting converted to an <code class="computeroutput"><span class="identifier">mpfr_float_100</span></code> + internally by the Boost.Math library. + </p> +<p> + One other potential pitfall that's only possible in C++11: you should never + store an expression template using: + </p> +<pre class="programlisting"><span class="keyword">auto</span> <span class="identifier">my_expression</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">+</span> <span class="identifier">b</span> <span class="special">-</span> <span class="identifier">c</span><span class="special">;</span> +</pre> +<p> + unless you're absolutely sure that the lifetimes of <code class="computeroutput"><span class="identifier">a</span></code>, + <code class="computeroutput"><span class="identifier">b</span></code> and <code class="computeroutput"><span class="identifier">c</span></code> + will outlive that of <code class="computeroutput"><span class="identifier">my_expression</span></code>. + </p> +<p> + And finally... the performance improvements from an expression template library + like this are often not as dramatic as the reduction in number of temporaries + would suggest. For example if we compare this library with <a href="http://math.berkeley.edu/~wilken/code/gmpfrxx/" target="_top">mpfr_class</a> + and <a href="http://www.holoborodko.com/pavel/mpfr/" target="_top">mpreal</a>, with + all three using the underlying <a href="http://www.mpfr.org" target="_top">MPFR</a> + library at 50 decimal digits precision then we see the following typical results + for polynomial execution: + </p> +<div class="table"> +<a name="boost_multiprecision.intro.evaluation_of_order_6_polynomial"></a><p class="title"><b>Table 1.1. Evaluation of Order 6 Polynomial.</b></p> +<div class="table-contents"><table class="table" summary="Evaluation of Order 6 Polynomial."> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Library + </p> + </th> +<th> + <p> + Relative Time + </p> + </th> +<th> + <p> + Relative number of memory allocations + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + number + </p> + </td> +<td> + <p> + 1.0 (0.00957s) + </p> + </td> +<td> + <p> + 1.0 (2996 total) + </p> + </td> +</tr> +<tr> +<td> + <p> + <a href="http://math.berkeley.edu/~wilken/code/gmpfrxx/" target="_top">mpfr_class</a> + </p> + </td> +<td> + <p> + 1.1 (0.0102s) + </p> + </td> +<td> + <p> + 4.3 (12976 total) + </p> + </td> +</tr> +<tr> +<td> + <p> + <a href="http://www.holoborodko.com/pavel/mpfr/" target="_top">mpreal</a> + </p> + </td> +<td> + <p> + 1.6 (0.0151s) + </p> + </td> +<td> + <p> + 9.3 (27947 total) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><p> + As you can see, the execution time increases a lot more slowly than the number + of memory allocations. There are a number of reasons for this: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + The cost of extended-precision multiplication and division is so great, + that the times taken for these tend to swamp everything else. + </li> +<li class="listitem"> + The cost of an in-place multiplication (using <code class="computeroutput"><span class="keyword">operator</span><span class="special">*=</span></code>) tends to be more than an out-of-place + <code class="computeroutput"><span class="keyword">operator</span><span class="special">*</span></code> + (typically <code class="computeroutput"><span class="keyword">operator</span> <span class="special">*=</span></code> + has to create a temporary workspace to carry out the multiplication, where + as <code class="computeroutput"><span class="keyword">operator</span><span class="special">*</span></code> + can use the target variable as workspace). Since the expression templates + carry out their magic by converting out-of-place operators to in-place + ones, we necessarily take this hit. Even so the transformation is more + efficient than creating the extra temporary variable, just not by as much + as one would hope. + </li> +</ul></div> +<p> + Finally, note that <code class="computeroutput"><span class="identifier">number</span></code> takes + a second template argument, which, when set to <code class="computeroutput"><span class="identifier">et_off</span></code> + disables all the expression template machinery. The result is much faster to + compile, but slower at runtime. + </p> +<p> + We'll conclude this section by providing some more performance comparisons + between these three libraries, again, all are using <a href="http://www.mpfr.org" target="_top">MPFR</a> + to carry out the underlying arithmetic, and all are operating at the same precision + (50 decimal digits): + </p> +<div class="table"> +<a name="boost_multiprecision.intro.evaluation_of_boost_math_s_besse"></a><p class="title"><b>Table 1.2. Evaluation of Boost.Math's Bessel function test data</b></p> +<div class="table-contents"><table class="table" summary="Evaluation of Boost.Math's Bessel function test data"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Library + </p> + </th> +<th> + <p> + Relative Time + </p> + </th> +<th> + <p> + Relative Number of Memory Allocations + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + mpfr_float_50 + </p> + </td> +<td> + <p> + 1.0 (5.78s) + </p> + </td> +<td> + <p> + 1.0 (1611963) + </p> + </td> +</tr> +<tr> +<td> + <p> + number<mpfr_float_backend<50>, et_off><br> (but with + rvalue reference support) + </p> + </td> +<td> + <p> + 1.1 (6.29s) + </p> + </td> +<td> + <p> + 2.64 (4260868) + </p> + </td> +</tr> +<tr> +<td> + <p> + <a href="http://math.berkeley.edu/~wilken/code/gmpfrxx/" target="_top">mpfr_class</a> + </p> + </td> +<td> + <p> + 1.1 (6.28s) + </p> + </td> +<td> + <p> + 2.45 (3948316) + </p> + </td> +</tr> +<tr> +<td> + <p> + <a href="http://www.holoborodko.com/pavel/mpfr/" target="_top">mpreal</a> + </p> + </td> +<td> + <p> + 1.65 (9.54s) + </p> + </td> +<td> + <p> + 8.21 (13226029) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.intro.evaluation_of_boost_math_s_non_c"></a><p class="title"><b>Table 1.3. Evaluation of Boost.Math's Non-Central T distribution test data</b></p> +<div class="table-contents"><table class="table" summary="Evaluation of Boost.Math's Non-Central T distribution test data"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Library + </p> + </th> +<th> + <p> + Relative Time + </p> + </th> +<th> + <p> + Relative Number of Memory Allocations + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + number + </p> + </td> +<td> + <p> + 1.0 (263s) + </p> + </td> +<td> + <p> + 1.0 (127710873) + </p> + </td> +</tr> +<tr> +<td> + <p> + number<mpfr_float_backend<50>, et_off><br> (but with + rvalue reference support) + </p> + </td> +<td> + <p> + 1.0 (260s) + </p> + </td> +<td> + <p> + 1.2 (156797871) + </p> + </td> +</tr> +<tr> +<td> + <p> + <a href="http://math.berkeley.edu/~wilken/code/gmpfrxx/" target="_top">mpfr_class</a> + </p> + </td> +<td> + <p> + 1.1 (287s) + </p> + </td> +<td> + <p> + 2.1 (268336640) + </p> + </td> +</tr> +<tr> +<td> + <p> + <a href="http://www.holoborodko.com/pavel/mpfr/" target="_top">mpreal</a> + </p> + </td> +<td> + <p> + 1.5 (389s) + </p> + </td> +<td> + <p> + 3.6 (466960653) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><p> + The above results were generated on Win32 compiling with Visual C++ 2010, all + optimizations on (/Ox), with MPFR 3.0 and MPIR 2.3.0. + </p> +<div class="footnotes"> +<br><hr style="width:100; text-align:left;margin-left: 0"> +<div id="ftn.boost_multiprecision.intro.f0" class="footnote"><p><a href="#boost_multiprecision.intro.f0" class="para"><sup class="para">[1] </sup></a> + The actual number generated will depend on the compiler, how well it optimises + the code, and whether it supports rvalue references. The number of 11 temporaries + was generated with Visual C++ 10 + </p></div> +</div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="tut.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/map.html b/libs/multiprecision/doc/html/boost_multiprecision/map.html new file mode 100644 index 0000000000..f5e451c61d --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/map.html @@ -0,0 +1,49 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Roadmap</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="prev" href="perf/rational_performance.html" title="Rational Type Performance"> +<link rel="next" href="map/hist.html" title="History"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="perf/rational_performance.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="map/hist.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="boost_multiprecision.map"></a><a class="link" href="map.html" title="Roadmap">Roadmap</a> +</h2></div></div></div> +<div class="toc"><dl class="toc"> +<dt><span class="section"><a href="map/hist.html">History</a></span></dt> +<dt><span class="section"><a href="map/todo.html">TODO</a></span></dt> +<dt><span class="section"><a href="map/faq.html">FAQ</a></span></dt> +<dt><span class="section"><a href="map/ack.html">Acknowledgements</a></span></dt> +</dl></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="perf/rational_performance.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="map/hist.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/map/ack.html b/libs/multiprecision/doc/html/boost_multiprecision/map/ack.html new file mode 100644 index 0000000000..23a4f32240 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/map/ack.html @@ -0,0 +1,64 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Acknowledgements</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../map.html" title="Roadmap"> +<link rel="prev" href="faq.html" title="FAQ"> +<link rel="next" href="../indexes.html" title="Indexes"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="faq.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../map.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="../indexes.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.map.ack"></a><a class="link" href="ack.html" title="Acknowledgements">Acknowledgements</a> +</h3></div></div></div> +<p> + This library would not have happened without: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + Christopher Kormanyos' C++ decimal number code. + </li> +<li class="listitem"> + Paul Bristow for patiently testing, and commenting on the library. + </li> +<li class="listitem"> + All the folks at GMP, MPFR and libtommath, for providing the "guts" + that makes this library work. + </li> +<li class="listitem"> + <a href="http://www-cs-faculty.stanford.edu/~uno/taocp.html" target="_top">"The + Art Of Computer Programming"</a>, Donald E. Knuth, Volume 2: + Seminumerical Algorithms, Third Edition (Reading, Massachusetts: Addison-Wesley, + 1997), xiv+762pp. ISBN 0-201-89684-2 + </li> +</ul></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="faq.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../map.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="../indexes.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/map/faq.html b/libs/multiprecision/doc/html/boost_multiprecision/map/faq.html new file mode 100644 index 0000000000..3eb2ac3528 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/map/faq.html @@ -0,0 +1,120 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>FAQ</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../map.html" title="Roadmap"> +<link rel="prev" href="todo.html" title="TODO"> +<link rel="next" href="ack.html" title="Acknowledgements"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="todo.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../map.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="ack.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.map.faq"></a><a class="link" href="faq.html" title="FAQ">FAQ</a> +</h3></div></div></div> +<div class="variablelist"> +<p class="title"><b></b></p> +<dl class="variablelist"> +<dt><span class="term">Why do I get compiler errors when passing a <code class="computeroutput"><span class="identifier">number</span></code> + to a template function?</span></dt> +<dd><p> + Most likely you are actually passing an expression template type to + the function and template-argument-deduction deduces the "wrong" + type. Try casting the arguments involving expressions to the actual + number type, or as a last resort turning off expression template support + in the number type you are using. + </p></dd> +<dt><span class="term">When is expression template support a performance gain?</span></dt> +<dd><p> + As a general rule, expression template support adds a small runtime + overhead creating and unpacking the expression templates, but greatly + reduces the number of temporaries created. So it's most effective in + improving performance when the cost of creating a temporary is high: + for example when creating a temporary involves a memory allocation. + It is least effective (and may even be a dis-optimisation) when temporaries + are cheap: for example if the number type is basically a thin wrapper + around a native arithmetic type. In addition, since the library makes + extensive use of thin inline wrapper functions, turning on compiler + optimization is essential to achieving high performance. + </p></dd> +<dt><span class="term">Do expression templates reorder operations?</span></dt> +<dd><p> + Yes they do, sometimes quite radically so, if this is a concern then + they should be turned off for the number type you are using. + </p></dd> +<dt><span class="term">I can't construct my number type from <span class="emphasis"><em>some other type</em></span>, + but the docs indicate that the conversion should be allowed, what's up?</span></dt> +<dd><p> + Some conversions are <span class="emphasis"><em>explicit</em></span>, that includes construction + from a string, or constructing from any type that may result in loss + of precision (for example constructing an integer type from a float). + </p></dd> +<dt><span class="term">Why do I get an exception thrown (or the program crash due to an + uncaught exception) when using the bitwise operators on a checked <code class="computeroutput"><span class="identifier">cpp_int</span></code>?</span></dt> +<dd><p> + Bitwise operations on negative values (or indeed any signed integer + type) are unspecified by the standard. As a result any attempt to carry + out a bitwise operation on a negative checked-integer will result in + a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">range_error</span></code> being thrown. + </p></dd> +<dt><span class="term">Why do I get compiler errors when trying to use the complement operator?</span></dt> +<dd><p> + Use of the complement operator on signed types is problematic as the + result is unspecified by the standard, and is further complicated by + the fact that most extended precision integer types use a sign-magnitude + representation rather than the 2's complement one favored by most native + integer types. As a result the complement operator is deliberately + disabled for checked <code class="computeroutput"><span class="identifier">cpp_int</span></code>'s. + Unchecked <code class="computeroutput"><span class="identifier">cpp_int</span></code>'s + give the same valued result as a 2's complement type would, but not + the same bit-pattern. + </p></dd> +<dt><span class="term">Why can't I negate an unsigned type?</span></dt> +<dd><p> + The unary negation operator is deliberately disabled for unsigned integer + types as its use would almost always be a programming error. + </p></dd> +<dt><span class="term">Why doesn't the library use proto?</span></dt> +<dd><p> + A very early version of the library did use proto, but compile times + became too slow for the library to be usable. Since the library only + required a tiny fraction of what proto has to offer anyway, a lightweight + expression template mechanism was used instead. Compile times are still + too slow... + </p></dd> +<dt><span class="term">Why not abstract out addition/multiplication algorithms?</span></dt> +<dd><p> + This was deemed not to be practical: these algorithms are intimately + tied to the actual data representation used. + </p></dd> +</dl> +</div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="todo.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../map.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="ack.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/map/hist.html b/libs/multiprecision/doc/html/boost_multiprecision/map/hist.html new file mode 100644 index 0000000000..c8469f448b --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/map/hist.html @@ -0,0 +1,295 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>History</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../map.html" title="Roadmap"> +<link rel="prev" href="../map.html" title="Roadmap"> +<link rel="next" href="todo.html" title="TODO"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../map.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../map.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="todo.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.map.hist"></a><a class="link" href="hist.html" title="History">History</a> +</h3></div></div></div> +<h5> +<a name="boost_multiprecision.map.hist.h0"></a> + <span class="phrase"><a name="boost_multiprecision.map.hist.multiprecision_2_2_3_boost_1_57"></a></span><a class="link" href="hist.html#boost_multiprecision.map.hist.multiprecision_2_2_3_boost_1_57">Multiprecision-2.2.3 + (Boost-1.57)</a> + </h5> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + Changed rational to float conversions to exactly round to nearest, see + [https://svn.boost.org/trac/boost/ticket/10085 10085]. + </li> +<li class="listitem"> + Added improved generic float to rational conversions. + </li> +<li class="listitem"> + Fixed rare bug in exponent function for <a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float">cpp_bin_float</a>. + </li> +<li class="listitem"> + Fixed various minor documentation issues. + </li> +</ul></div> +<h5> +<a name="boost_multiprecision.map.hist.h1"></a> + <span class="phrase"><a name="boost_multiprecision.map.hist.multiprecision_2_2_2_boost_1_56"></a></span><a class="link" href="hist.html#boost_multiprecision.map.hist.multiprecision_2_2_2_boost_1_56">Multiprecision-2.2.2 + (Boost-1.56)</a> + </h5> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + Change floating point to rational conversions to be implicit, see <a href="https://svn.boost.org/trac/boost/ticket/10082" target="_top">10082</a>. + </li> +<li class="listitem"> + Fix definition of checked_cpp_rational typedef. + </li> +</ul></div> +<h5> +<a name="boost_multiprecision.map.hist.h2"></a> + <span class="phrase"><a name="boost_multiprecision.map.hist.multiprecision_2_2_1"></a></span><a class="link" href="hist.html#boost_multiprecision.map.hist.multiprecision_2_2_1">Multiprecision-2.2.1</a> + </h5> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> + Fix bug in assignment from string in cpp_int, see <a href="https://svn.boost.org/trac/boost/ticket/9936" target="_top">9936</a>. + </li></ul></div> +<h5> +<a name="boost_multiprecision.map.hist.h3"></a> + <span class="phrase"><a name="boost_multiprecision.map.hist.multiprecision_2_2_0"></a></span><a class="link" href="hist.html#boost_multiprecision.map.hist.multiprecision_2_2_0">Multiprecision-2.2.0</a> + </h5> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + Moved to Boost.Multiprecision specific version number - we have one breaking + change in Boost-1.54 which makes this major version 2, plus two releases + with new features since then. + </li> +<li class="listitem"> + Added new <a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float">cpp_bin_float</a> + backend for binary floating point. + </li> +<li class="listitem"> + Added MSVC-specific #include for compiler intrinsics, see <a href="https://svn.boost.org/trac/boost/ticket/9336" target="_top">9336</a>. + </li> +<li class="listitem"> + Fixed various typos in docs, see <a href="https://svn.boost.org/trac/boost/ticket/9432" target="_top">9432</a>. + </li> +<li class="listitem"> + Fixed <a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational">gmp_rational</a> + to allow move-copy from an already copied-from object, see <a href="https://svn.boost.org/trac/boost/ticket/9497" target="_top">9497</a>. + </li> +<li class="listitem"> + Added list of values for numeric_limits. + </li> +</ul></div> +<h5> +<a name="boost_multiprecision.map.hist.h4"></a> + <span class="phrase"><a name="boost_multiprecision.map.hist.boost_1_55"></a></span><a class="link" href="hist.html#boost_multiprecision.map.hist.boost_1_55">Boost-1.55</a> + </h5> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + Added support for Boost.Serialization. + </li> +<li class="listitem"> + Suppressed some GCC warnings. See <a href="https://svn.boost.org/trac/boost/ticket/8872" target="_top">8872</a>. + </li> +<li class="listitem"> + Fixed bug in pow for large integer arguments. See <a href="https://svn.boost.org/trac/boost/ticket/8809" target="_top">8809</a>. + </li> +<li class="listitem"> + Fixed bug in pow for calculation of 0<sup>N</sup>. See <a href="https://svn.boost.org/trac/boost/ticket/8798" target="_top">8798</a>. + </li> +<li class="listitem"> + Fixed bug in fixed precision cpp_int IO code that causes conversion to + string to fail when the bit count is very small (less than CHAR_BIT). + See <a href="https://svn.boost.org/trac/boost/ticket/8745" target="_top">8745</a>. + </li> +<li class="listitem"> + Fixed bug in cpp_int that causes left shift to fail when a fixed precision + type would overflow. See <a href="https://svn.boost.org/trac/boost/ticket/8741" target="_top">8741</a>. + </li> +<li class="listitem"> + Fixed some cosmetic warnings from cpp_int. See <a href="https://svn.boost.org/trac/boost/ticket/8748" target="_top">8748</a>. + </li> +<li class="listitem"> + Fixed calls to functions which are required to be macros in C99. See + <a href="https://svn.boost.org/trac/boost/ticket/8732" target="_top">8732</a>. + </li> +<li class="listitem"> + Fixed bug that causes construction from INT_MIN, LONG_MIN etc to fail + in cpp_int. See <a href="https://svn.boost.org/trac/boost/ticket/8711" target="_top">8711</a>. + </li> +</ul></div> +<h5> +<a name="boost_multiprecision.map.hist.h5"></a> + <span class="phrase"><a name="boost_multiprecision.map.hist.1_54"></a></span><a class="link" href="hist.html#boost_multiprecision.map.hist.1_54">1.54</a> + </h5> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <span class="bold"><strong>Breaking change</strong></span> renamed <code class="computeroutput"><span class="identifier">rational_adapter</span></code> to <code class="computeroutput"><span class="identifier">rational_adaptor</span></code>. + </li> +<li class="listitem"> + Add support for <a href="http://perso.ens-lyon.fr/nathalie.revol/software.html" target="_top">MPFI</a>. + </li> +<li class="listitem"> + Add logged_adaptor. + </li> +<li class="listitem"> + Add support for 128-bit floats via GCC's <code class="computeroutput"><a class="link" href="../tut/floats/float128.html" title="float128">float128</a></code> + or Intel's <code class="computeroutput"><span class="identifier">_Quad</span></code> data + types. + </li> +<li class="listitem"> + Add support for user-defined literals in cpp_int, improve <code class="computeroutput"><span class="keyword">constexpr</span></code> support. + </li> +<li class="listitem"> + Fixed bug in integer division of <code class="computeroutput"><span class="identifier">cpp_int</span></code> + that results in incorrect sign of <code class="computeroutput"><span class="identifier">cpp_int</span></code> + when both arguments are small enough to fit in a <code class="computeroutput"><span class="identifier">double_limb_type</span></code>. + See <a href="https://svn.boost.org/trac/boost/ticket/8126" target="_top">8126</a>. + </li> +<li class="listitem"> + Fixed bug in subtraction of a single limb in <code class="computeroutput"><span class="identifier">cpp_int</span></code> + that results in incorrect value when the result should have a 0 in the + last limb: <a href="https://svn.boost.org/trac/boost/ticket/8133" target="_top">8133</a>. + </li> +<li class="listitem"> + Fixed bug in <code class="computeroutput"><span class="identifier">cpp_int</span></code> + where division of 0 by something doesn't get zero in the result: <a href="https://svn.boost.org/trac/boost/ticket/8160" target="_top">8160</a>. + </li> +<li class="listitem"> + Fixed bug in some transcendental functions that caused incorrect return + values when variables are reused, for example with <code class="computeroutput"><span class="identifier">a</span> + <span class="special">=</span> <span class="identifier">pow</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span></code>. See <a href="https://svn.boost.org/trac/boost/ticket/8326" target="_top">8326</a>. + </li> +<li class="listitem"> + Fixed some assignment operations in the mpfr and gmp backends to be safe + if the target has been moved from: <a href="https://svn.boost.org/trac/boost/ticket/8326" target="_top">8667</a>. + </li> +<li class="listitem"> + Fixed bug in <code class="computeroutput"><span class="identifier">cpp_int</span></code> + that gives incorrect answer for 0%N for large N: <a href="https://svn.boost.org/trac/boost/ticket/8670" target="_top">8670</a>. + </li> +<li class="listitem"> + Fixed set_precision in mpfr backend so it doesn't trample over an existing + value: <a href="https://svn.boost.org/trac/boost/ticket/8692" target="_top">8692</a>. + </li> +</ul></div> +<h5> +<a name="boost_multiprecision.map.hist.h6"></a> + <span class="phrase"><a name="boost_multiprecision.map.hist.1_53"></a></span><a class="link" href="hist.html#boost_multiprecision.map.hist.1_53">1.53</a> + </h5> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + First Release. + </li> +<li class="listitem"> + Fix bug in <a href="https://svn.boost.org/trac/boost/ticket/7878" target="_top">cpp_int + division</a>. + </li> +<li class="listitem"> + Fix issue <a href="https://svn.boost.org/trac/boost/ticket/7806" target="_top">#7806</a>. + </li> +</ul></div> +<h5> +<a name="boost_multiprecision.map.hist.h7"></a> + <span class="phrase"><a name="boost_multiprecision.map.hist.post_review_changes"></a></span><a class="link" href="hist.html#boost_multiprecision.map.hist.post_review_changes">Post + review changes</a> + </h5> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + Non-expression template operators further optimised with rvalue reference + support. + </li> +<li class="listitem"> + Many functions made <code class="computeroutput"><span class="identifier">constexp</span></code>. + </li> +<li class="listitem"> + Differentiate between explicit and implicit conversions in the number + constructor. + </li> +<li class="listitem"> + Removed "mp_" prefix from types. + </li> +<li class="listitem"> + Allowed mixed precision arithmetic. + </li> +<li class="listitem"> + Changed ExpressionTemplates parameter to class <code class="computeroutput"><span class="identifier">number</span></code> + to use enumerated values rather than true/false. + </li> +<li class="listitem"> + Changed ExpressionTemplate parameter default value to use a traits class + so that the default value depends on the backend used. + </li> +<li class="listitem"> + Added support for fused-multiply-add/subtract with GMP support. + </li> +<li class="listitem"> + Tweaked expression template unpacking to use fewer temporaries when the + LHS also appears in the RHS. + </li> +<li class="listitem"> + Refactored <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code> + based on review comments with new template parameter structure. + </li> +<li class="listitem"> + Added additional template parameter to <code class="computeroutput"><span class="identifier">mpfr_float_backend</span></code> + to allow stack-based allocation. + </li> +<li class="listitem"> + Added section on mixed precision arithmetic, and added support for operations + yielding a higher precision result than either of the arguments. + </li> +<li class="listitem"> + Added overloads of integer-specific functions for built in integer types. + </li> +</ul></div> +<h5> +<a name="boost_multiprecision.map.hist.h8"></a> + <span class="phrase"><a name="boost_multiprecision.map.hist.pre_review_history"></a></span><a class="link" href="hist.html#boost_multiprecision.map.hist.pre_review_history">Pre-review + history</a> + </h5> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + 2011-2012, John Maddock adds an expression template enabled front end + to Christopher's code, and adds support for other backends. + </li> +<li class="listitem"> + 2011, Christopher Kormanyos publishes the decimal floating point code + under the Boost Software Licence. The code is published as: <a href="http://doi.acm.org/10.1145/1916461.1916469" target="_top">"Algorithm + 910: A Portable C++ Multiple-Precision System for Special-Function Calculations"</a>, + in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. + </li> +<li class="listitem"> + 2002-2011, Christopher Kormanyos develops the all C++ decimal arithmetic + floating point code. + </li> +</ul></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../map.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../map.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="todo.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/map/todo.html b/libs/multiprecision/doc/html/boost_multiprecision/map/todo.html new file mode 100644 index 0000000000..067af586b0 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/map/todo.html @@ -0,0 +1,229 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>TODO</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../map.html" title="Roadmap"> +<link rel="prev" href="hist.html" title="History"> +<link rel="next" href="faq.html" title="FAQ"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="hist.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../map.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="faq.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.map.todo"></a><a class="link" href="todo.html" title="TODO">TODO</a> +</h3></div></div></div> +<p> + More a list of what <span class="emphasis"><em>could</em></span> be done, rather than what + <span class="emphasis"><em>should</em></span> be done (which may be a much smaller list!). + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + Add back-end support for libdecNumber. + </li> +<li class="listitem"> + Add an adaptor back-end for complex number types. + </li> +<li class="listitem"> + Add better multiplication routines (Karatsuba, FFT etc) to cpp_int_backend. + </li> +<li class="listitem"> + Add assembly level routines to cpp_int_backend. + </li> +<li class="listitem"> + Can ring types (exact floating point types) be supported? The answer + should be yes, but someone needs to write it, the hard part is IO and + binary-decimal conversion. + </li> +<li class="listitem"> + Should there be a choice of rounding mode (probably MPFR specific)? + </li> +<li class="listitem"> + We can reuse temporaries in multiple subtrees (temporary caching). + </li> +<li class="listitem"> + cpp_dec_float should round to nearest. + </li> +<li class="listitem"> + A 2's complement fixed precision int that uses exactly N bits and no + more. + </li> +</ul></div> +<p> + Things requested in review: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + The performances of mp_number<a_trivial_adaptor<float>, false>respect + to float and mp_number<a_trivial_adaptor<int>, false> and + int should be given to show the cost of using the generic interface (Mostly + done, just need to update docs to the latest results). + </li> +<li class="listitem"> + Should we provide min/max overloads for expression templates? (Not done + - we can't overload functions declared in the std namespace :-( ). + </li> +<li class="listitem"> + The rounding applied when converting must be documented (Done). + </li> +<li class="listitem"> + Document why we don't abstract out addition/multiplication algorithms + etc. (done - FAQ) + </li> +<li class="listitem"> + Document why we don't use proto (compile times) (Done). + </li> +<li class="listitem"> + We can reuse temporaries in multiple subtrees (temporary caching) Moved + to TODO list. + </li> +<li class="listitem"> + Emphasise in the docs that ET's may reorder operations (done 2012/10/31). + </li> +<li class="listitem"> + Document what happens to small fixed precision cpp_int's (done 2012/10/31). + </li> +<li class="listitem"> + The use of bool in template parameters could be improved by the use of + an enum class which will be more explicit. E.g <code class="computeroutput"><span class="keyword">enum</span> + <span class="keyword">class</span> <span class="identifier">expression_template</span> + <span class="special">{</span><span class="identifier">disabled</span><span class="special">,</span> <span class="identifier">enabled</span><span class="special">};</span> <span class="keyword">enum</span> <span class="keyword">class</span> <span class="identifier">sign</span> + <span class="special">{</span><span class="keyword">unsigned</span><span class="special">,</span> <span class="keyword">signed</span><span class="special">};</span></code> (Partly done 2012/09/15, done 2012/10/31). + </li> +<li class="listitem"> + Each back-end should document the requirements it satisfies (not currently + scheduled for inclusion: it's deliberately an implementation detail, + and "optional" requirements are optimisations which can't be + detected by the user). Not done: this is an implementation detail, the + exact list of requirements satisfied is purely an optimization, not something + the user can detect. + </li> +<li class="listitem"> + A backend for an overflow aware integers (done 2012/10/31). + </li> +<li class="listitem"> + IIUC convert_to is used to emulate in c++98 compilers C++11 explicit + conversions. Could the explicit conversion operator be added on compilers + supporting it? (Done 2012/09/15). + </li> +<li class="listitem"> + The front-end should make the differences between implicit and explicit + construction (Done 2012/09/15). + </li> +<li class="listitem"> + The tutorial should add more examples concerning implicit or explicit + conversions. (Done 2012/09/15). + </li> +<li class="listitem"> + The documentation must explain how move semantics helps in this domain + and what the backend needs to do to profit from this optimization. (Done + 2012/09/15). + </li> +<li class="listitem"> + The documentation should contain Throws specification on the mp_number + and backend requirements operations. (Done 2012/09/15). + </li> +<li class="listitem"> + The library interface should use the noexcept (BOOST_NOEXCEPT, ...) facilities + (Done 2012/09/15). + </li> +<li class="listitem"> + It is unfortunate that the generic mp_number front end can not make use + constexpr as not all the backends can ensure this (done - we can go quite + a way). + </li> +<li class="listitem"> + literals: The library doesn't provide some kind of literals. I think + that the mp_number class should provide a way to create literals if the + backend is able to. (Done 2012/09/15). + </li> +<li class="listitem"> + The ExpresionTemplate parameter could be defaulted to a traits class + for more sensible defaults (done 2012/09/20). + </li> +<li class="listitem"> + In a = exp1 op exp2 where a occurs inside one of exp1 or exp2 then we + can optimise and eliminate one more temporary (done 2012/09/20). + </li> +</ul></div> +<h5> +<a name="boost_multiprecision.map.todo.h0"></a> + <span class="phrase"><a name="boost_multiprecision.map.todo.pre_review_comments"></a></span><a class="link" href="todo.html#boost_multiprecision.map.todo.pre_review_comments">Pre-Review + Comments</a> + </h5> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + Make fixed precision orthogonal to Allocator type in cpp_int. Possible + solution - add an additional MaxBits template argument that defaults + to 0 (meaning keep going till no more space/memory). Done. + </li> +<li class="listitem"> + Can ring types (exact floating point types) be supported? The answer + should be yes, but someone needs to write it (Moved to TODO list). + </li> +<li class="listitem"> + Should there be a choice of rounding mode (probably MPFR specific)? Moved + to TODO list. + </li> +<li class="listitem"> + Make the exponent type for cpp_dec_float a template parameter, maybe + include support for big-integer exponents. Open question - what should + be the default - int32_t or int64_t? (done 2012/09/06) + </li> +<li class="listitem"> + Document the size requirements of fixed precision ints (done 2012/09/15). + </li> +<li class="listitem"> + Document std lib function accuracy (done 2012/09/15). + </li> +<li class="listitem"> + Be a bit clearer on the effects of sign-magnitude representation of cpp_int + - min == -max etc - done. + </li> +<li class="listitem"> + Document cpp_dec_float precision, rounding, and exponent size (done 2012/09/06). + </li> +<li class="listitem"> + Can we be clearer in the docs that mixed arithmetic doesn't work (no + longer applicable as of 2012/09/06)? + </li> +<li class="listitem"> + Document round functions behaviour better (they behave as in C++11) (added + note 2012/09/06). + </li> +<li class="listitem"> + Document limits on size of cpp_dec_float (done 2012/09/06). + </li> +<li class="listitem"> + Add support for fused multiply add (and subtract). GMP mpz_t could use + this (done 2012/09/20). + </li> +</ul></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="hist.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../map.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="faq.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/perf.html b/libs/multiprecision/doc/html/boost_multiprecision/perf.html new file mode 100644 index 0000000000..f4cd63d2e0 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/perf.html @@ -0,0 +1,57 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Performance Comparison</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="prev" href="ref/headers.html" title="Header File Structure"> +<link rel="next" href="perf/overhead.html" title="The Overhead in the Number Class Wrapper"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="ref/headers.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="perf/overhead.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="boost_multiprecision.perf"></a><a class="link" href="perf.html" title="Performance Comparison">Performance Comparison</a> +</h2></div></div></div> +<div class="toc"><dl class="toc"> +<dt><span class="section"><a href="perf/overhead.html">The Overhead in the + Number Class Wrapper</a></span></dt> +<dt><span class="section"><a href="perf/realworld.html">Floating-Point Real + World Tests</a></span></dt> +<dt><span class="section"><a href="perf/int_real_world.html">Integer Real + World Tests</a></span></dt> +<dt><span class="section"><a href="perf/float_performance.html">Float Algorithm + Performance</a></span></dt> +<dt><span class="section"><a href="perf/integer_performance.html">Integer + Algorithm Performance</a></span></dt> +<dt><span class="section"><a href="perf/rational_performance.html">Rational + Type Performance</a></span></dt> +</dl></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="ref/headers.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="perf/overhead.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/perf/float_performance.html b/libs/multiprecision/doc/html/boost_multiprecision/perf/float_performance.html new file mode 100644 index 0000000000..4c0a963759 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/perf/float_performance.html @@ -0,0 +1,2078 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Float Algorithm Performance</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../perf.html" title="Performance Comparison"> +<link rel="prev" href="int_real_world.html" title="Integer Real World Tests"> +<link rel="next" href="integer_performance.html" title="Integer Algorithm Performance"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="int_real_world.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.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="integer_performance.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.perf.float_performance"></a><a class="link" href="float_performance.html" title="Float Algorithm Performance">Float Algorithm + Performance</a> +</h3></div></div></div> +<p> + Note that these tests are carefully designed to test performance of the underlying + algorithms and not memory allocation or variable copying. As usual, performance + results should be taken with a healthy dose of scepticism, and real-world + performance may vary widely depending upon the specifics of the program. + In each table relative times are given first, with the best performer given + a score of 1. Total actual times are given in brackets, measured in seconds + for 500000 operations. + </p> +<div class="table"> +<a name="boost_multiprecision.perf.float_performance.operator"></a><p class="title"><b>Table 1.14. Operator +</b></p> +<div class="table-contents"><table class="table" summary="Operator +"> +<colgroup> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 50 Bits + </p> + </th> +<th> + <p> + 100 Bits + </p> + </th> +<th> + <p> + 500 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_dec_float + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0575156s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0740086s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.219073s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_float + </p> + </td> +<td> + <p> + 2.45065 (0.14095s) + </p> + </td> +<td> + <p> + 2.01398 (0.149052s) + </p> + </td> +<td> + <p> + 1.09608 (0.240122s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpfr_float + </p> + </td> +<td> + <p> + 2.6001 (0.149546s) + </p> + </td> +<td> + <p> + 2.12079 (0.156957s) + </p> + </td> +<td> + <p> + 1.09078 (0.23896s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.float_performance.operator_int"></a><p class="title"><b>Table 1.15. Operator +(int)</b></p> +<div class="table-contents"><table class="table" summary="Operator +(int)"> +<colgroup> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 50 Bits + </p> + </th> +<th> + <p> + 100 Bits + </p> + </th> +<th> + <p> + 500 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_dec_float + </p> + </td> +<td> + <p> + 1.46115 (0.0855392s) + </p> + </td> +<td> + <p> + 2.60353 (0.114398s) + </p> + </td> +<td> + <p> + 3.62562 (0.264905s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_float + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0585424s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0439398s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0730648s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpfr_float + </p> + </td> +<td> + <p> + 2.40441 (0.14076s) + </p> + </td> +<td> + <p> + 3.2877 (0.144461s) + </p> + </td> +<td> + <p> + 2.40379 (0.175632s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long"></a><p class="title"><b>Table 1.16. Operator +(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator +(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 50 Bits + </p> + </th> +<th> + <p> + 100 Bits + </p> + </th> +<th> + <p> + 500 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_dec_float + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.118146s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.144714s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.315639s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_float + </p> + </td> +<td> + <p> + 4.5555 (0.538213s) + </p> + </td> +<td> + <p> + 3.83096 (0.554395s) + </p> + </td> +<td> + <p> + 1.95079 (0.615745s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpfr_float + </p> + </td> +<td> + <p> + 5.74477 (0.678719s) + </p> + </td> +<td> + <p> + 4.85295 (0.702291s) + </p> + </td> +<td> + <p> + 2.70354 (0.853342s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long0"></a><p class="title"><b>Table 1.17. Operator +=(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator +=(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 50 Bits + </p> + </th> +<th> + <p> + 100 Bits + </p> + </th> +<th> + <p> + 500 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_dec_float + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.101188s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.122394s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.251975s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_float + </p> + </td> +<td> + <p> + 5.199 (0.526079s) + </p> + </td> +<td> + <p> + 4.39327 (0.537712s) + </p> + </td> +<td> + <p> + 2.42151 (0.610159s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpfr_float + </p> + </td> +<td> + <p> + 6.08318 (0.615547s) + </p> + </td> +<td> + <p> + 5.18525 (0.634645s) + </p> + </td> +<td> + <p> + 3.1022 (0.781677s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.float_performance.operator0"></a><p class="title"><b>Table 1.18. Operator -</b></p> +<div class="table-contents"><table class="table" summary="Operator -"> +<colgroup> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 50 Bits + </p> + </th> +<th> + <p> + 100 Bits + </p> + </th> +<th> + <p> + 500 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_dec_float + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0895163s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.129248s) + </p> + </td> +<td> + <p> + 1.5088 (0.374512s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_float + </p> + </td> +<td> + <p> + 1.72566 (0.154474s) + </p> + </td> +<td> + <p> + 1.22567 (0.158415s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.248219s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpfr_float + </p> + </td> +<td> + <p> + 1.83764 (0.164499s) + </p> + </td> +<td> + <p> + 1.34284 (0.173559s) + </p> + </td> +<td> + <p> + 1.00226 (0.248781s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.float_performance.operator_int0"></a><p class="title"><b>Table 1.19. Operator -(int)</b></p> +<div class="table-contents"><table class="table" summary="Operator -(int)"> +<colgroup> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 50 Bits + </p> + </th> +<th> + <p> + 100 Bits + </p> + </th> +<th> + <p> + 500 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_dec_float + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.105285s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.142741s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.278718s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_float + </p> + </td> +<td> + <p> + 2.34437 (0.246828s) + </p> + </td> +<td> + <p> + 1.28814 (0.183871s) + </p> + </td> +<td> + <p> + 1.00731 (0.280754s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpfr_float + </p> + </td> +<td> + <p> + 2.8032 (0.295136s) + </p> + </td> +<td> + <p> + 2.09178 (0.298582s) + </p> + </td> +<td> + <p> + 1.25213 (0.34899s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long1"></a><p class="title"><b>Table 1.20. Operator -(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator -(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 50 Bits + </p> + </th> +<th> + <p> + 100 Bits + </p> + </th> +<th> + <p> + 500 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_dec_float + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.13719s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.184428s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.344212s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_float + </p> + </td> +<td> + <p> + 4.0804 (0.559791s) + </p> + </td> +<td> + <p> + 3.06776 (0.565781s) + </p> + </td> +<td> + <p> + 2.07736 (0.715053s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpfr_float + </p> + </td> +<td> + <p> + 5.10114 (0.699828s) + </p> + </td> +<td> + <p> + 3.88684 (0.716843s) + </p> + </td> +<td> + <p> + 2.50074 (0.860784s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long2"></a><p class="title"><b>Table 1.21. Operator -=(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator -=(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 50 Bits + </p> + </th> +<th> + <p> + 100 Bits + </p> + </th> +<th> + <p> + 500 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_dec_float + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.100984s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.123148s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.246181s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_float + </p> + </td> +<td> + <p> + 5.68353 (0.573944s) + </p> + </td> +<td> + <p> + 4.68636 (0.577116s) + </p> + </td> +<td> + <p> + 2.6958 (0.663655s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpfr_float + </p> + </td> +<td> + <p> + 6.19738 (0.625834s) + </p> + </td> +<td> + <p> + 5.18544 (0.638577s) + </p> + </td> +<td> + <p> + 3.18738 (0.784673s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.float_performance.operator1"></a><p class="title"><b>Table 1.22. Operator *</b></p> +<div class="table-contents"><table class="table" summary="Operator *"> +<colgroup> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 50 Bits + </p> + </th> +<th> + <p> + 100 Bits + </p> + </th> +<th> + <p> + 500 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_dec_float + </p> + </td> +<td> + <p> + 1.03667 (0.284251s) + </p> + </td> +<td> + <p> + 1.30576 (0.536527s) + </p> + </td> +<td> + <p> + 1.44686 (4.81057s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_float + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.274196s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.410891s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (3.32484s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpfr_float + </p> + </td> +<td> + <p> + 1.24537 (0.341477s) + </p> + </td> +<td> + <p> + 1.15785 (0.475749s) + </p> + </td> +<td> + <p> + 1.1796 (3.92199s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.float_performance.operator_int1"></a><p class="title"><b>Table 1.23. Operator *(int)</b></p> +<div class="table-contents"><table class="table" summary="Operator *(int)"> +<colgroup> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 50 Bits + </p> + </th> +<th> + <p> + 100 Bits + </p> + </th> +<th> + <p> + 500 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_dec_float + </p> + </td> +<td> + <p> + 3.97453 (0.240262s) + </p> + </td> +<td> + <p> + 9.91222 (0.463473s) + </p> + </td> +<td> + <p> + 50.7926 (4.36527s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_float + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0604505s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0467577s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0859431s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpfr_float + </p> + </td> +<td> + <p> + 2.56974 (0.155342s) + </p> + </td> +<td> + <p> + 3.56312 (0.166603s) + </p> + </td> +<td> + <p> + 3.22964 (0.277565s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long3"></a><p class="title"><b>Table 1.24. Operator *(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator *(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 50 Bits + </p> + </th> +<th> + <p> + 100 Bits + </p> + </th> +<th> + <p> + 500 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_dec_float + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.331877s) + </p> + </td> +<td> + <p> + 1.01058 (0.586122s) + </p> + </td> +<td> + <p> + 6.688 (4.7931s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_float + </p> + </td> +<td> + <p> + 1.72433 (0.572266s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.579987s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.716672s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpfr_float + </p> + </td> +<td> + <p> + 2.5553 (0.848047s) + </p> + </td> +<td> + <p> + 1.74987 (1.0149s) + </p> + </td> +<td> + <p> + 1.80403 (1.2929s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long4"></a><p class="title"><b>Table 1.25. Operator *=(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator *=(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 50 Bits + </p> + </th> +<th> + <p> + 100 Bits + </p> + </th> +<th> + <p> + 500 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_dec_float + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.321397s) + </p> + </td> +<td> + <p> + 1.00772 (0.574887s) + </p> + </td> +<td> + <p> + 6.65946 (4.7468s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_float + </p> + </td> +<td> + <p> + 1.77419 (0.570218s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.570482s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.712791s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpfr_float + </p> + </td> +<td> + <p> + 2.62172 (0.842611s) + </p> + </td> +<td> + <p> + 1.77691 (1.01369s) + </p> + </td> +<td> + <p> + 1.77511 (1.26528s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.float_performance.operator2"></a><p class="title"><b>Table 1.26. Operator /</b></p> +<div class="table-contents"><table class="table" summary="Operator /"> +<colgroup> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 50 Bits + </p> + </th> +<th> + <p> + 100 Bits + </p> + </th> +<th> + <p> + 500 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_dec_float + </p> + </td> +<td> + <p> + 2.96096 (4.00777s) + </p> + </td> +<td> + <p> + 4.53244 (7.86435s) + </p> + </td> +<td> + <p> + 6.11936 (51.5509s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_float + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (1.35354s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (1.73512s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (8.42422s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpfr_float + </p> + </td> +<td> + <p> + 1.30002 (1.75963s) + </p> + </td> +<td> + <p> + 1.39045 (2.41261s) + </p> + </td> +<td> + <p> + 1.66762 (14.0484s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.float_performance.operator_int2"></a><p class="title"><b>Table 1.27. Operator /(int)</b></p> +<div class="table-contents"><table class="table" summary="Operator /(int)"> +<colgroup> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 50 Bits + </p> + </th> +<th> + <p> + 100 Bits + </p> + </th> +<th> + <p> + 500 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_dec_float + </p> + </td> +<td> + <p> + 8.60726 (1.8181s) + </p> + </td> +<td> + <p> + 15.4122 (3.67479s) + </p> + </td> +<td> + <p> + 34.5119 (24.729s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_float + </p> + </td> +<td> + <p> + 1.24394 (0.262756s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.238433s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.716536s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpfr_float + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.211229s) + </p> + </td> +<td> + <p> + 1.12178 (0.26747s) + </p> + </td> +<td> + <p> + 1.02237 (0.732562s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long5"></a><p class="title"><b>Table 1.28. Operator /(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator /(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 50 Bits + </p> + </th> +<th> + <p> + 100 Bits + </p> + </th> +<th> + <p> + 500 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_dec_float + </p> + </td> +<td> + <p> + 2.10976 (1.97569s) + </p> + </td> +<td> + <p> + 3.73601 (3.9133s) + </p> + </td> +<td> + <p> + 11.3085 (25.4533s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_float + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.936452s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (1.04746s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (2.25081s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpfr_float + </p> + </td> +<td> + <p> + 1.3423 (1.257s) + </p> + </td> +<td> + <p> + 1.51575 (1.58768s) + </p> + </td> +<td> + <p> + 3.31513 (7.46175s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long6"></a><p class="title"><b>Table 1.29. Operator /=(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator /=(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 50 Bits + </p> + </th> +<th> + <p> + 100 Bits + </p> + </th> +<th> + <p> + 500 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_dec_float + </p> + </td> +<td> + <p> + 2.17401 (1.96883s) + </p> + </td> +<td> + <p> + 3.79591 (3.8965s) + </p> + </td> +<td> + <p> + 11.2328 (25.2606s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_float + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.905621s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (1.0265s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (2.24882s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpfr_float + </p> + </td> +<td> + <p> + 1.37953 (1.24933s) + </p> + </td> +<td> + <p> + 1.53073 (1.57129s) + </p> + </td> +<td> + <p> + 3.30546 (7.43339s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.float_performance.operator_construct"></a><p class="title"><b>Table 1.30. Operator construct</b></p> +<div class="table-contents"><table class="table" summary="Operator construct"> +<colgroup> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 50 Bits + </p> + </th> +<th> + <p> + 100 Bits + </p> + </th> +<th> + <p> + 500 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_dec_float + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.00929804s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0268321s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0310685s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_float + </p> + </td> +<td> + <p> + 30.8781 (0.287106s) + </p> + </td> +<td> + <p> + 7.59969 (0.203916s) + </p> + </td> +<td> + <p> + 6.51873 (0.202527s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpfr_float + </p> + </td> +<td> + <p> + 23.5296 (0.218779s) + </p> + </td> +<td> + <p> + 8.11058 (0.217624s) + </p> + </td> +<td> + <p> + 7.16325 (0.222552s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.float_performance.operator_construct_unsigned"></a><p class="title"><b>Table 1.31. Operator construct(unsigned)</b></p> +<div class="table-contents"><table class="table" summary="Operator construct(unsigned)"> +<colgroup> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 50 Bits + </p> + </th> +<th> + <p> + 100 Bits + </p> + </th> +<th> + <p> + 500 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_dec_float + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0603971s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0735485s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.116464s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_float + </p> + </td> +<td> + <p> + 3.91573 (0.236498s) + </p> + </td> +<td> + <p> + 2.88171 (0.211945s) + </p> + </td> +<td> + <p> + 1.81075 (0.210887s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpfr_float + </p> + </td> +<td> + <p> + 4.90052 (0.295977s) + </p> + </td> +<td> + <p> + 4.01118 (0.295017s) + </p> + </td> +<td> + <p> + 2.62005 (0.305141s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.float_performance.operator_construct_unsigned_long"></a><p class="title"><b>Table 1.32. Operator construct(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator construct(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 50 Bits + </p> + </th> +<th> + <p> + 100 Bits + </p> + </th> +<th> + <p> + 500 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_dec_float + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0610288s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0759005s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.118511s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_float + </p> + </td> +<td> + <p> + 8.26247 (0.504249s) + </p> + </td> +<td> + <p> + 6.69042 (0.507806s) + </p> + </td> +<td> + <p> + 4.32819 (0.51294s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpfr_float + </p> + </td> +<td> + <p> + 10.1593 (0.620013s) + </p> + </td> +<td> + <p> + 8.45884 (0.64203s) + </p> + </td> +<td> + <p> + 5.51472 (0.653557s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.float_performance.operator_str"></a><p class="title"><b>Table 1.33. Operator str</b></p> +<div class="table-contents"><table class="table" summary="Operator str"> +<colgroup> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 50 Bits + </p> + </th> +<th> + <p> + 100 Bits + </p> + </th> +<th> + <p> + 500 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_dec_float + </p> + </td> +<td> + <p> + 2.95848 (0.0223061s) + </p> + </td> +<td> + <p> + 3.33461 (0.033471s) + </p> + </td> +<td> + <p> + 3.0159 (0.132732s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_float + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.00753971s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0100374s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0440106s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpfr_float + </p> + </td> +<td> + <p> + 1.25424 (0.00945658s) + </p> + </td> +<td> + <p> + 1.24943 (0.012541s) + </p> + </td> +<td> + <p> + 1.09428 (0.0481601s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><p> + Test code was compiled with Microsoft Visual Studio 2010 with all optimisations + turned on (/Ox), and used MPIR-2.3.0 and <a href="http://www.mpfr.org" target="_top">MPFR</a>-3.0.0. + The tests were run on 32-bit Windows Vista machine. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="int_real_world.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.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="integer_performance.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/perf/int_real_world.html b/libs/multiprecision/doc/html/boost_multiprecision/perf/int_real_world.html new file mode 100644 index 0000000000..7c8946099c --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/perf/int_real_world.html @@ -0,0 +1,381 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Integer Real World Tests</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../perf.html" title="Performance Comparison"> +<link rel="prev" href="realworld.html" title="Floating-Point Real World Tests"> +<link rel="next" href="float_performance.html" title="Float Algorithm Performance"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="realworld.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.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="float_performance.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.perf.int_real_world"></a><a class="link" href="int_real_world.html" title="Integer Real World Tests">Integer Real + World Tests</a> +</h3></div></div></div> +<p> + The first set of <a href="../../../../performance/voronoi_performance.cpp" target="_top">tests</a> + measure the times taken to execute the multiprecision part of the Voronoi-diagram + builder from Boost.Polygon. The tests mainly create a large number of temporaries + "just in case" multiprecision arithmetic is required, for comparison, + also included in the tests is Boost.Polygon's own partial-multiprecision + integer type which was custom written for this specific task: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Integer Type + </p> + </th> +<th> + <p> + Relative Performance (Actual time in parenthesis) + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + polygon::detail::extended_int + </p> + </td> +<td> + <p> + 1(0.138831s) + </p> + </td> +</tr> +<tr> +<td> + <p> + int256_t + </p> + </td> +<td> + <p> + 1.19247(0.165551s) + </p> + </td> +</tr> +<tr> +<td> + <p> + int512_t + </p> + </td> +<td> + <p> + 1.23301(0.17118s) + </p> + </td> +</tr> +<tr> +<td> + <p> + int1024_t + </p> + </td> +<td> + <p> + 1.21463(0.168628s) + </p> + </td> +</tr> +<tr> +<td> + <p> + checked_int256_t + </p> + </td> +<td> + <p> + 1.31711(0.182855s) + </p> + </td> +</tr> +<tr> +<td> + <p> + checked_int512_t + </p> + </td> +<td> + <p> + 1.57413(0.218538s) + </p> + </td> +</tr> +<tr> +<td> + <p> + checked_int1024_t + </p> + </td> +<td> + <p> + 1.36992(0.190187s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + 1.63244(0.226632s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpz_int + </p> + </td> +<td> + <p> + 5.42511(0.753172s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tom_int + </p> + </td> +<td> + <p> + 29.0793(4.03709s) + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + Note how for this use case, any dynamic allocation is a performance killer. + </p> +<p> + The next <a href="../../../../performance/miller_rabin_performance.cpp" target="_top">tests</a> + measure the time taken to generate 1000 128-bit random numbers and test for + primality using the Miller Rabin test. This is primarily a test of modular-exponentiation + since that is the rate limiting step: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Integer Type + </p> + </th> +<th> + <p> + Relative Performance (Actual time in parenthesis) + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + 5.25827(0.379597s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int (no Expression templates) + </p> + </td> +<td> + <p> + 5.15675(0.372268s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int (128-bit cache) + </p> + </td> +<td> + <p> + 5.10882(0.368808s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int (256-bit cache) + </p> + </td> +<td> + <p> + 5.50623(0.397497s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int (512-bit cache) + </p> + </td> +<td> + <p> + 4.82257(0.348144s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int (1024-bit cache) + </p> + </td> +<td> + <p> + 5.00053(0.360991s) + </p> + </td> +</tr> +<tr> +<td> + <p> + int1024_t + </p> + </td> +<td> + <p> + 4.37589(0.315897s) + </p> + </td> +</tr> +<tr> +<td> + <p> + checked_int1024_t + </p> + </td> +<td> + <p> + 4.52396(0.326587s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpz_int + </p> + </td> +<td> + <p> + 1(0.0721905s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpz_int (no Expression templates) + </p> + </td> +<td> + <p> + 1.0248(0.0739806s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tom_int + </p> + </td> +<td> + <p> + 2.60673(0.188181s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tom_int (no Expression templates) + </p> + </td> +<td> + <p> + 2.64997(0.191303s) + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + It's interesting to note that expression templates have little effect here + - perhaps because the actual expressions involved are relatively trivial + in this case - so the time taken for multiplication and division tends to + dominate. Also note how increasing the internal cache size used by <code class="computeroutput"><span class="identifier">cpp_int</span></code> is quite effective in this case + in cutting out memory allocations altogether - cutting about a third off + the total runtime. Finally the much quicker times from GMP and tommath are + down to their much better modular-exponentiation algorithms (GMP's is about + 5x faster). That's an issue which needs to be addressed in a future release + for <a class="link" href="../tut/ints/cpp_int.html" title="cpp_int">cpp_int</a>. + </p> +<p> + Test code was compiled with Microsoft Visual Studio 2010 with all optimisations + turned on (/Ox), and used MPIR-2.3.0 and <a href="http://www.mpfr.org" target="_top">MPFR</a>-3.0.0. + The tests were run on 32-bit Windows Vista machine. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="realworld.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.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="float_performance.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/perf/integer_performance.html b/libs/multiprecision/doc/html/boost_multiprecision/perf/integer_performance.html new file mode 100644 index 0000000000..dbc6f2a63a --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/perf/integer_performance.html @@ -0,0 +1,4830 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Integer Algorithm Performance</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../perf.html" title="Performance Comparison"> +<link rel="prev" href="float_performance.html" title="Float Algorithm Performance"> +<link rel="next" href="rational_performance.html" title="Rational Type Performance"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="float_performance.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.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="rational_performance.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.perf.integer_performance"></a><a class="link" href="integer_performance.html" title="Integer Algorithm Performance">Integer + Algorithm Performance</a> +</h3></div></div></div> +<p> + Note that these tests are carefully designed to test performance of the underlying + algorithms and not memory allocation or variable copying. As usual, performance + results should be taken with a healthy dose of scepticism, and real-world + performance may vary widely depending upon the specifics of the program. + In each table relative times are given first, with the best performer given + a score of 1. Total actual times are given in brackets, measured in seconds + for 500000 operations. + </p> +<div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator"></a><p class="title"><b>Table 1.34. Operator +</b></p> +<div class="table-contents"><table class="table" summary="Operator +"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + 1.23704 (0.0274266s) + </p> + </td> +<td> + <p> + 1.09358 (0.0383278s) + </p> + </td> +<td> + <p> + 1.26645 (0.0558828s) + </p> + </td> +<td> + <p> + 1.32188 (0.0916899s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + 1.62044 (0.0359271s) + </p> + </td> +<td> + <p> + 1.5277 (0.053543s) + </p> + </td> +<td> + <p> + 1.73059 (0.076363s) + </p> + </td> +<td> + <p> + 1.71537 (0.118983s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 1.87515 (0.0415741s) + </p> + </td> +<td> + <p> + 1.21699 (0.042653s) + </p> + </td> +<td> + <p> + 1.15599 (0.0510088s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0693631s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0221711s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.035048s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0441255s) + </p> + </td> +<td> + <p> + 1.04441 (0.0724435s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator_int"></a><p class="title"><b>Table 1.35. Operator +(int)</b></p> +<div class="table-contents"><table class="table" summary="Operator +(int)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0155377s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0209523s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0306377s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.043125s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + 1.31904 (0.0204948s) + </p> + </td> +<td> + <p> + 1.76211 (0.0369203s) + </p> + </td> +<td> + <p> + 1.52941 (0.0468577s) + </p> + </td> +<td> + <p> + 1.60412 (0.0691778s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 1.96204 (0.0304855s) + </p> + </td> +<td> + <p> + 2.02569 (0.0424428s) + </p> + </td> +<td> + <p> + 2.11505 (0.0648002s) + </p> + </td> +<td> + <p> + 2.65993 (0.114709s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 14.0654 (0.218543s) + </p> + </td> +<td> + <p> + 10.8239 (0.226786s) + </p> + </td> +<td> + <p> + 7.76691 (0.23796s) + </p> + </td> +<td> + <p> + 6.10039 (0.263079s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long"></a><p class="title"><b>Table 1.36. Operator +(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator +(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.026624s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0291407s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0373209s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0464919s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + 1.31378 (0.034978s) + </p> + </td> +<td> + <p> + 1.54897 (0.045138s) + </p> + </td> +<td> + <p> + 1.53649 (0.0573431s) + </p> + </td> +<td> + <p> + 1.27833 (0.0594319s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 25.5775 (0.680974s) + </p> + </td> +<td> + <p> + 24.0117 (0.699717s) + </p> + </td> +<td> + <p> + 19.5633 (0.730121s) + </p> + </td> +<td> + <p> + 16.8939 (0.785432s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 19.4694 (0.518354s) + </p> + </td> +<td> + <p> + 18.4246 (0.536907s) + </p> + </td> +<td> + <p> + 14.7715 (0.551288s) + </p> + </td> +<td> + <p> + 12.3637 (0.574812s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long0"></a><p class="title"><b>Table 1.37. Operator +=(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator +=(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + 1.18405 (0.0196905s) + </p> + </td> +<td> + <p> + 1.22304 (0.0206476s) + </p> + </td> +<td> + <p> + 1.25861 (0.0217397s) + </p> + </td> +<td> + <p> + 1.29525 (0.0220829s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0166298s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0168822s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0172728s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0170492s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 39.9082 (0.663668s) + </p> + </td> +<td> + <p> + 39.4584 (0.666147s) + </p> + </td> +<td> + <p> + 38.5504 (0.665873s) + </p> + </td> +<td> + <p> + 39.2231 (0.668722s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 30.6219 (0.509238s) + </p> + </td> +<td> + <p> + 30.4135 (0.513447s) + </p> + </td> +<td> + <p> + 30.9077 (0.533863s) + </p> + </td> +<td> + <p> + 32.3086 (0.550835s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator0"></a><p class="title"><b>Table 1.38. Operator -</b></p> +<div class="table-contents"><table class="table" summary="Operator -"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + 1.06986 (0.0296064s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0381508s) + </p> + </td> +<td> + <p> + 1.05932 (0.053186s) + </p> + </td> +<td> + <p> + 1.1766 (0.0844721s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + 1.3304 (0.0368163s) + </p> + </td> +<td> + <p> + 1.44506 (0.0551303s) + </p> + </td> +<td> + <p> + 1.4431 (0.0724545s) + </p> + </td> +<td> + <p> + 1.57255 (0.112898s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 1.48072 (0.0409761s) + </p> + </td> +<td> + <p> + 1.19003 (0.0454007s) + </p> + </td> +<td> + <p> + 1.0794 (0.0541942s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0717934s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0276731s) + </p> + </td> +<td> + <p> + 1.10891 (0.0423057s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0502076s) + </p> + </td> +<td> + <p> + 1.08479 (0.0778811s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator_int0"></a><p class="title"><b>Table 1.39. Operator -(int)</b></p> +<div class="table-contents"><table class="table" summary="Operator -(int)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0147372s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0170001s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0232882s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0310734s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + 1.4267 (0.0210256s) + </p> + </td> +<td> + <p> + 1.98887 (0.0338109s) + </p> + </td> +<td> + <p> + 1.83788 (0.0428009s) + </p> + </td> +<td> + <p> + 1.81269 (0.0563264s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 2.07504 (0.0305803s) + </p> + </td> +<td> + <p> + 2.40928 (0.0409579s) + </p> + </td> +<td> + <p> + 2.58711 (0.0602493s) + </p> + </td> +<td> + <p> + 3.26438 (0.101435s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 13.5424 (0.199577s) + </p> + </td> +<td> + <p> + 12.1793 (0.207048s) + </p> + </td> +<td> + <p> + 9.28855 (0.216314s) + </p> + </td> +<td> + <p> + 7.49327 (0.232842s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long1"></a><p class="title"><b>Table 1.40. Operator -(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator -(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0277377s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0296807s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0372392s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0455855s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + 1.19867 (0.0332484s) + </p> + </td> +<td> + <p> + 1.48639 (0.0441169s) + </p> + </td> +<td> + <p> + 1.43253 (0.0533464s) + </p> + </td> +<td> + <p> + 1.27697 (0.0582111s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 24.1794 (0.670683s) + </p> + </td> +<td> + <p> + 22.9073 (0.679904s) + </p> + </td> +<td> + <p> + 18.8758 (0.702922s) + </p> + </td> +<td> + <p> + 16.5837 (0.755975s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 18.149 (0.503413s) + </p> + </td> +<td> + <p> + 17.4116 (0.516787s) + </p> + </td> +<td> + <p> + 14.0411 (0.52288s) + </p> + </td> +<td> + <p> + 11.8237 (0.538987s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long2"></a><p class="title"><b>Table 1.41. Operator -=(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator -=(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + 1.26896 (0.0203467s) + </p> + </td> +<td> + <p> + 1.25722 (0.0206147s) + </p> + </td> +<td> + <p> + 1.36108 (0.0225485s) + </p> + </td> +<td> + <p> + 1.18351 (0.0226161s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0160342s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0163971s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0165667s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0191094s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 41.1339 (0.659547s) + </p> + </td> +<td> + <p> + 40.3982 (0.662411s) + </p> + </td> +<td> + <p> + 39.925 (0.661425s) + </p> + </td> +<td> + <p> + 34.636 (0.661874s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 31.1543 (0.499533s) + </p> + </td> +<td> + <p> + 31.0303 (0.508806s) + </p> + </td> +<td> + <p> + 30.7699 (0.509756s) + </p> + </td> +<td> + <p> + 27.7054 (0.529434s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator1"></a><p class="title"><b>Table 1.42. Operator *</b></p> +<div class="table-contents"><table class="table" summary="Operator *"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + 1.11839 (0.0757577s) + </p> + </td> +<td> + <p> + 1.61061 (0.207951s) + </p> + </td> +<td> + <p> + 1.4501 (0.696912s) + </p> + </td> +<td> + <p> + 1.72796 (2.64108s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + 1.01115 (0.0684934s) + </p> + </td> +<td> + <p> + 1.28687 (0.166152s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.480595s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (1.52844s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0677384s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.129113s) + </p> + </td> +<td> + <p> + 1.09011 (0.523902s) + </p> + </td> +<td> + <p> + 1.03374 (1.58s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 1.6322 (0.110562s) + </p> + </td> +<td> + <p> + 2.71751 (0.350866s) + </p> + </td> +<td> + <p> + 2.05222 (0.986288s) + </p> + </td> +<td> + <p> + 2.0644 (3.15531s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator_int1"></a><p class="title"><b>Table 1.43. Operator *(int)</b></p> +<div class="table-contents"><table class="table" summary="Operator *(int)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + 1.01611 (0.0229536s) + </p> + </td> +<td> + <p> + 1.12175 (0.0298152s) + </p> + </td> +<td> + <p> + 1.16413 (0.0416439s) + </p> + </td> +<td> + <p> + 1.31747 (0.0666043s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + 1.30215 (0.0294152s) + </p> + </td> +<td> + <p> + 1.669 (0.0443606s) + </p> + </td> +<td> + <p> + 1.72395 (0.0616701s) + </p> + </td> +<td> + <p> + 1.88315 (0.095202s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0225897s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0265791s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0357725s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0505547s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 10.8281 (0.244603s) + </p> + </td> +<td> + <p> + 10.1516 (0.26982s) + </p> + </td> +<td> + <p> + 8.76424 (0.313519s) + </p> + </td> +<td> + <p> + 8.04364 (0.406644s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long3"></a><p class="title"><b>Table 1.44. Operator *(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator *(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0570721s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0856141s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.143279s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.252785s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + 1.10857 (0.0632686s) + </p> + </td> +<td> + <p> + 1.2951 (0.110878s) + </p> + </td> +<td> + <p> + 1.20827 (0.173121s) + </p> + </td> +<td> + <p> + 1.18463 (0.299456s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 12.0605 (0.68832s) + </p> + </td> +<td> + <p> + 8.13434 (0.696415s) + </p> + </td> +<td> + <p> + 5.21762 (0.747577s) + </p> + </td> +<td> + <p> + 3.11601 (0.787681s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 10.0524 (0.57371s) + </p> + </td> +<td> + <p> + 7.33116 (0.627651s) + </p> + </td> +<td> + <p> + 4.85202 (0.695193s) + </p> + </td> +<td> + <p> + 3.35808 (0.848871s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long4"></a><p class="title"><b>Table 1.45. Operator *=(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator *=(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + 111.27 (7.43118s) + </p> + </td> +<td> + <p> + 67.7078 (7.34138s) + </p> + </td> +<td> + <p> + 43.3851 (7.4075s) + </p> + </td> +<td> + <p> + 25.3089 (7.55455s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0667848s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.108427s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.170738s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.298493s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 46.3718 (3.09693s) + </p> + </td> +<td> + <p> + 28.4639 (3.08626s) + </p> + </td> +<td> + <p> + 18.1719 (3.10264s) + </p> + </td> +<td> + <p> + 10.5223 (3.14083s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 276.674 (18.4776s) + </p> + </td> +<td> + <p> + 169.146 (18.34s) + </p> + </td> +<td> + <p> + 108.491 (18.5236s) + </p> + </td> +<td> + <p> + 63.3261 (18.9024s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator2"></a><p class="title"><b>Table 1.46. Operator /</b></p> +<div class="table-contents"><table class="table" summary="Operator /"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + 2.68035 (0.595251s) + </p> + </td> +<td> + <p> + 2.04702 (0.707471s) + </p> + </td> +<td> + <p> + 1.62314 (0.921536s) + </p> + </td> +<td> + <p> + 1.43112 (1.38811s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.222079s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.34561s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.567748s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.969945s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 3.79283 (0.842308s) + </p> + </td> +<td> + <p> + 2.73668 (0.945824s) + </p> + </td> +<td> + <p> + 1.86649 (1.05969s) + </p> + </td> +<td> + <p> + 1.32141 (1.2817s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 13.2531 (2.94324s) + </p> + </td> +<td> + <p> + 11.2054 (3.87271s) + </p> + </td> +<td> + <p> + 9.83293 (5.58262s) + </p> + </td> +<td> + <p> + 13.0164 (12.6252s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator_int2"></a><p class="title"><b>Table 1.47. Operator /(int)</b></p> +<div class="table-contents"><table class="table" summary="Operator /(int)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + 4.06026 (0.225473s) + </p> + </td> +<td> + <p> + 3.45732 (0.340049s) + </p> + </td> +<td> + <p> + 3.00195 (0.547957s) + </p> + </td> +<td> + <p> + 2.80587 (0.978029s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + 2.43766 (0.135367s) + </p> + </td> +<td> + <p> + 2.56264 (0.252052s) + </p> + </td> +<td> + <p> + 2.44011 (0.445402s) + </p> + </td> +<td> + <p> + 2.38009 (0.829617s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0555316s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0983563s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.182534s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.348566s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 35.9988 (1.99907s) + </p> + </td> +<td> + <p> + 27.1024 (2.66569s) + </p> + </td> +<td> + <p> + 21.8333 (3.98531s) + </p> + </td> +<td> + <p> + 25.8066 (8.99528s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long5"></a><p class="title"><b>Table 1.48. Operator /(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator /(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + 1.50505 (0.705756s) + </p> + </td> +<td> + <p> + 1.39347 (1.58556s) + </p> + </td> +<td> + <p> + 2.63348 (3.57438s) + </p> + </td> +<td> + <p> + 4.75451 (8.52733s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.468925s) + </p> + </td> +<td> + <p> + 1.12378 (1.27869s) + </p> + </td> +<td> + <p> + 2.29966 (3.12128s) + </p> + </td> +<td> + <p> + 4.4844 (8.04288s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 2.17234 (1.01866s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (1.13785s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (1.35728s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (1.79352s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 4.74612 (2.22557s) + </p> + </td> +<td> + <p> + 2.70088 (3.07319s) + </p> + </td> +<td> + <p> + 3.65634 (4.96268s) + </p> + </td> +<td> + <p> + 6.79408 (12.1853s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long6"></a><p class="title"><b>Table 1.49. Operator /=(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator /=(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + 1.76281 (0.0574966s) + </p> + </td> +<td> + <p> + 1.76471 (0.0604224s) + </p> + </td> +<td> + <p> + 1.56085 (0.0716403s) + </p> + </td> +<td> + <p> + 1.31422 (0.124043s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0326164s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0342393s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0458981s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0943852s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 20.2862 (0.661664s) + </p> + </td> +<td> + <p> + 19.4043 (0.664389s) + </p> + </td> +<td> + <p> + 14.4881 (0.664976s) + </p> + </td> +<td> + <p> + 7.14238 (0.674135s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 32.9555 (1.07489s) + </p> + </td> +<td> + <p> + 30.1525 (1.0324s) + </p> + </td> +<td> + <p> + 22.8324 (1.04796s) + </p> + </td> +<td> + <p> + 11.7456 (1.10861s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator3"></a><p class="title"><b>Table 1.50. Operator %</b></p> +<div class="table-contents"><table class="table" summary="Operator %"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + 1.8501 (0.364131s) + </p> + </td> +<td> + <p> + 1.46527 (0.476653s) + </p> + </td> +<td> + <p> + 1.27509 (0.689738s) + </p> + </td> +<td> + <p> + 1.20064 (1.11769s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.196817s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.325301s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.540932s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.930916s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 3.2533 (0.640305s) + </p> + </td> +<td> + <p> + 2.15441 (0.700832s) + </p> + </td> +<td> + <p> + 1.47898 (0.800029s) + </p> + </td> +<td> + <p> + 1.07439 (1.00016s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 15.3501 (3.02116s) + </p> + </td> +<td> + <p> + 12.1106 (3.9396s) + </p> + </td> +<td> + <p> + 11.0689 (5.98752s) + </p> + </td> +<td> + <p> + 13.5535 (12.6172s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator_int3"></a><p class="title"><b>Table 1.51. Operator %(int)</b></p> +<div class="table-contents"><table class="table" summary="Operator %(int)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + 1.82761 (0.104331s) + </p> + </td> +<td> + <p> + 2.01496 (0.202512s) + </p> + </td> +<td> + <p> + 2.10004 (0.389523s) + </p> + </td> +<td> + <p> + 2.17252 (0.768097s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + 1.78851 (0.102099s) + </p> + </td> +<td> + <p> + 1.96844 (0.197838s) + </p> + </td> +<td> + <p> + 2.02956 (0.376451s) + </p> + </td> +<td> + <p> + 2.07257 (0.73276s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.057086s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.100505s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.185483s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.353552s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 36.3018 (2.07233s) + </p> + </td> +<td> + <p> + 26.3075 (2.64402s) + </p> + </td> +<td> + <p> + 21.9525 (4.07183s) + </p> + </td> +<td> + <p> + 25.6759 (9.07775s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator_construct"></a><p class="title"><b>Table 1.52. Operator construct</b></p> +<div class="table-contents"><table class="table" summary="Operator construct"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + 1.40211 (0.0026854s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.00278639s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.00322813s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0027185s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.00191526s) + </p> + </td> +<td> + <p> + 1.40721 (0.00392103s) + </p> + </td> +<td> + <p> + 1.90346 (0.00614463s) + </p> + </td> +<td> + <p> + 2.14621 (0.00583447s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 98.705 (0.189046s) + </p> + </td> +<td> + <p> + 68.9726 (0.192184s) + </p> + </td> +<td> + <p> + 58.8994 (0.190135s) + </p> + </td> +<td> + <p> + 70.0525 (0.190438s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 105.602 (0.202255s) + </p> + </td> +<td> + <p> + 74.1994 (0.206748s) + </p> + </td> +<td> + <p> + 63.6455 (0.205456s) + </p> + </td> +<td> + <p> + 76.8935 (0.209035s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator_construct_unsigned"></a><p class="title"><b>Table 1.53. Operator construct(unsigned)</b></p> +<div class="table-contents"><table class="table" summary="Operator construct(unsigned)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + 1.73436 (0.00348927s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.00263476s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0027009s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.00318651s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.00201185s) + </p> + </td> +<td> + <p> + 1.36851 (0.0036057s) + </p> + </td> +<td> + <p> + 2.07362 (0.00560064s) + </p> + </td> +<td> + <p> + 1.66856 (0.00531688s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 97.2414 (0.195635s) + </p> + </td> +<td> + <p> + 76.3759 (0.201232s) + </p> + </td> +<td> + <p> + 72.7396 (0.196462s) + </p> + </td> +<td> + <p> + 63.8129 (0.20334s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 210.112 (0.422713s) + </p> + </td> +<td> + <p> + 162.652 (0.42855s) + </p> + </td> +<td> + <p> + 158.33 (0.427634s) + </p> + </td> +<td> + <p> + 134.626 (0.428987s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator_construct_unsigned_long"></a><p class="title"><b>Table 1.54. Operator construct(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator construct(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + 2.34403 (0.00739542s) + </p> + </td> +<td> + <p> + 1.66376 (0.00713834s) + </p> + </td> +<td> + <p> + 1.22989 (0.0074969s) + </p> + </td> +<td> + <p> + 1.23708 (0.00711417s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.00315501s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.00429049s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.00609561s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0057508s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 222.866 (0.703144s) + </p> + </td> +<td> + <p> + 164.331 (0.705059s) + </p> + </td> +<td> + <p> + 115.363 (0.70321s) + </p> + </td> +<td> + <p> + 122.347 (0.703596s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 218.681 (0.689941s) + </p> + </td> +<td> + <p> + 163.796 (0.702765s) + </p> + </td> +<td> + <p> + 114.57 (0.698376s) + </p> + </td> +<td> + <p> + 122.422 (0.704027s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator_gcd"></a><p class="title"><b>Table 1.55. Operator gcd</b></p> +<div class="table-contents"><table class="table" summary="Operator gcd"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + 1.16358 (2.74442s) + </p> + </td> +<td> + <p> + 1.39847 (8.11559s) + </p> + </td> +<td> + <p> + 1.64677 (22.2518s) + </p> + </td> +<td> + <p> + 1.95096 (64.4961s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (2.35859s) + </p> + </td> +<td> + <p> + 1.30986 (7.60133s) + </p> + </td> +<td> + <p> + 1.67681 (22.6577s) + </p> + </td> +<td> + <p> + 2.0895 (69.0758s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 1.03392 (2.4386s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (5.80319s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (13.5124s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (33.0586s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 5.25978 (12.4057s) + </p> + </td> +<td> + <p> + 4.4619 (25.8932s) + </p> + </td> +<td> + <p> + 4.15577 (56.1542s) + </p> + </td> +<td> + <p> + 3.91192 (129.323s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator_powm"></a><p class="title"><b>Table 1.56. Operator powm</b></p> +<div class="table-contents"><table class="table" summary="Operator powm"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + 2.50722 (2.91621s) + </p> + </td> +<td> + <p> + 3.5561 (13.406s) + </p> + </td> +<td> + <p> + 4.37066 (73.483s) + </p> + </td> +<td> + <p> + 4.88831 (473.91s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + 1.93385 (2.24931s) + </p> + </td> +<td> + <p> + 3.18107 (11.9922s) + </p> + </td> +<td> + <p> + 4.20753 (70.7403s) + </p> + </td> +<td> + <p> + 4.8158 (466.88s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (1.16313s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (3.76986s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (16.8128s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (96.9476s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 1.44081 (1.67584s) + </p> + </td> +<td> + <p> + 1.8794 (7.08507s) + </p> + </td> +<td> + <p> + 2.19115 (36.8394s) + </p> + </td> +<td> + <p> + 2.17186 (210.557s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator_str"></a><p class="title"><b>Table 1.57. Operator str</b></p> +<div class="table-contents"><table class="table" summary="Operator str"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + 1.17175 (0.00160006s) + </p> + </td> +<td> + <p> + 1.41999 (0.00329476s) + </p> + </td> +<td> + <p> + 1.40856 (0.00813784s) + </p> + </td> +<td> + <p> + 1.52964 (0.0229767s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.00136554s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.00232027s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.00577741s) + </p> + </td> +<td> + <p> + 1.14754 (0.0172372s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 1.50501 (0.00205515s) + </p> + </td> +<td> + <p> + 1.52968 (0.00354926s) + </p> + </td> +<td> + <p> + 1.01989 (0.0058923s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.015021s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 12.2161 (0.0166816s) + </p> + </td> +<td> + <p> + 16.9577 (0.0393463s) + </p> + </td> +<td> + <p> + 18.7474 (0.108311s) + </p> + </td> +<td> + <p> + 22.7368 (0.341528s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator4"></a><p class="title"><b>Table 1.58. Operator |</b></p> +<div class="table-contents"><table class="table" summary="Operator |"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0301617s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0423404s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0522358s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0813156s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + 1.0638 (0.0320861s) + </p> + </td> +<td> + <p> + 1.22566 (0.0518951s) + </p> + </td> +<td> + <p> + 1.28515 (0.0671305s) + </p> + </td> +<td> + <p> + 1.16118 (0.094422s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 1.76553 (0.0532514s) + </p> + </td> +<td> + <p> + 1.51489 (0.0641408s) + </p> + </td> +<td> + <p> + 1.70708 (0.0891706s) + </p> + </td> +<td> + <p> + 1.77346 (0.14421s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 4.37637 (0.131999s) + </p> + </td> +<td> + <p> + 3.46212 (0.146587s) + </p> + </td> +<td> + <p> + 2.91875 (0.152463s) + </p> + </td> +<td> + <p> + 4.19621 (0.341217s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator_int4"></a><p class="title"><b>Table 1.59. Operator |(int)</b></p> +<div class="table-contents"><table class="table" summary="Operator |(int)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0289129s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0351119s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0406779s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0525891s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + 1.06091 (0.030674s) + </p> + </td> +<td> + <p> + 1.25979 (0.0442336s) + </p> + </td> +<td> + <p> + 1.36194 (0.0554009s) + </p> + </td> +<td> + <p> + 1.37438 (0.0722772s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 4.92854 (0.142498s) + </p> + </td> +<td> + <p> + 4.34687 (0.152627s) + </p> + </td> +<td> + <p> + 3.71442 (0.151095s) + </p> + </td> +<td> + <p> + 2.981 (0.156768s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 10.9847 (0.317598s) + </p> + </td> +<td> + <p> + 9.37065 (0.329021s) + </p> + </td> +<td> + <p> + 8.53651 (0.347248s) + </p> + </td> +<td> + <p> + 11.2155 (0.589813s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator5"></a><p class="title"><b>Table 1.60. Operator ^</b></p> +<div class="table-contents"><table class="table" summary="Operator ^"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0305149s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.04217s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0525977s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0816632s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + 1.01544 (0.0309861s) + </p> + </td> +<td> + <p> + 1.24872 (0.0526585s) + </p> + </td> +<td> + <p> + 1.26661 (0.066621s) + </p> + </td> +<td> + <p> + 1.15965 (0.0947007s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 1.64675 (0.0502505s) + </p> + </td> +<td> + <p> + 1.47181 (0.0620663s) + </p> + </td> +<td> + <p> + 1.66038 (0.0873322s) + </p> + </td> +<td> + <p> + 1.67895 (0.137108s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 4.30668 (0.131418s) + </p> + </td> +<td> + <p> + 3.45859 (0.145849s) + </p> + </td> +<td> + <p> + 2.91462 (0.153303s) + </p> + </td> +<td> + <p> + 4.15538 (0.339342s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator_int5"></a><p class="title"><b>Table 1.61. Operator ^(int)</b></p> +<div class="table-contents"><table class="table" summary="Operator ^(int)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + 1.01566 (0.0296088s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0356634s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0401898s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0514097s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0291524s) + </p> + </td> +<td> + <p> + 1.2393 (0.0441976s) + </p> + </td> +<td> + <p> + 1.38556 (0.0556856s) + </p> + </td> +<td> + <p> + 1.38899 (0.0714075s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 4.68027 (0.136441s) + </p> + </td> +<td> + <p> + 4.15243 (0.14809s) + </p> + </td> +<td> + <p> + 3.74237 (0.150405s) + </p> + </td> +<td> + <p> + 3.0483 (0.156712s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 10.919 (0.318314s) + </p> + </td> +<td> + <p> + 9.16311 (0.326788s) + </p> + </td> +<td> + <p> + 8.62554 (0.346659s) + </p> + </td> +<td> + <p> + 11.6212 (0.597442s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator6"></a><p class="title"><b>Table 1.62. Operator &</b></p> +<div class="table-contents"><table class="table" summary="Operator &"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + 1.0346 (0.0303431s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0427309s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0535587s) + </p> + </td> +<td> + <p> + 1.06945 (0.0828084s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0293284s) + </p> + </td> +<td> + <p> + 1.10435 (0.04719s) + </p> + </td> +<td> + <p> + 1.05262 (0.0563769s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0774309s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 1.86057 (0.0545675s) + </p> + </td> +<td> + <p> + 1.58432 (0.0676995s) + </p> + </td> +<td> + <p> + 1.69164 (0.0906018s) + </p> + </td> +<td> + <p> + 1.86625 (0.144505s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 4.4157 (0.129506s) + </p> + </td> +<td> + <p> + 3.60396 (0.154s) + </p> + </td> +<td> + <p> + 2.95985 (0.158525s) + </p> + </td> +<td> + <p> + 4.4032 (0.340944s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator_int6"></a><p class="title"><b>Table 1.63. Operator &(int)</b></p> +<div class="table-contents"><table class="table" summary="Operator &(int)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + 1.05874 (0.038946s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0483903s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.063842s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.100361s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0367853s) + </p> + </td> +<td> + <p> + 1.05827 (0.0512099s) + </p> + </td> +<td> + <p> + 1.09114 (0.0696605s) + </p> + </td> +<td> + <p> + 1.09432 (0.109826s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 3.92298 (0.144308s) + </p> + </td> +<td> + <p> + 2.99447 (0.144903s) + </p> + </td> +<td> + <p> + 2.228 (0.14224s) + </p> + </td> +<td> + <p> + 1.42296 (0.142809s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 8.79208 (0.323419s) + </p> + </td> +<td> + <p> + 7.02288 (0.339839s) + </p> + </td> +<td> + <p> + 5.65271 (0.36088s) + </p> + </td> +<td> + <p> + 6.27104 (0.629365s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator7"></a><p class="title"><b>Table 1.64. Operator <<</b></p> +<div class="table-contents"><table class="table" summary="Operator <<"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0248801s) + </p> + </td> +<td> + <p> + 1.23196 (0.04s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0424149s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.060157s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + 1.08931 (0.027102s) + </p> + </td> +<td> + <p> + 1.40572 (0.0456418s) + </p> + </td> +<td> + <p> + 1.3475 (0.0571542s) + </p> + </td> +<td> + <p> + 1.24573 (0.0749397s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 1.05561 (0.0262636s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0324686s) + </p> + </td> +<td> + <p> + 1.09914 (0.0466199s) + </p> + </td> +<td> + <p> + 1.16315 (0.0699719s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 1.60497 (0.0399319s) + </p> + </td> +<td> + <p> + 2.13048 (0.0691737s) + </p> + </td> +<td> + <p> + 2.31219 (0.0980712s) + </p> + </td> +<td> + <p> + 2.74695 (0.165248s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.integer_performance.operator8"></a><p class="title"><b>Table 1.65. Operator >></b></p> +<div class="table-contents"><table class="table" summary="Operator >>"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0213349s) + </p> + </td> +<td> + <p> + 1.02127 (0.0295019s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0327116s) + </p> + </td> +<td> + <p> + 1.13168 (0.0433804s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int(fixed) + </p> + </td> +<td> + <p> + 1.13514 (0.0242181s) + </p> + </td> +<td> + <p> + 1.16938 (0.0337803s) + </p> + </td> +<td> + <p> + 1.46999 (0.0480859s) + </p> + </td> +<td> + <p> + 1.60077 (0.061362s) + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp_int + </p> + </td> +<td> + <p> + 1.26614 (0.0270129s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0288873s) + </p> + </td> +<td> + <p> + 1.42219 (0.0465221s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0383329s) + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath_int + </p> + </td> +<td> + <p> + 12.0066 (0.25616s) + </p> + </td> +<td> + <p> + 10.2837 (0.297067s) + </p> + </td> +<td> + <p> + 9.99696 (0.327017s) + </p> + </td> +<td> + <p> + 16.0943 (0.616942s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><p> + Test code was compiled with Microsoft Visual Studio 2010 with all optimisations + turned on (/Ox), and used MPIR-2.3.0 and <a href="http://www.mpfr.org" target="_top">MPFR</a>-3.0.0. + The tests were run on 32-bit Windows Vista machine. + </p> +<p> + Linux x86_64 results are broadly similar, except that libtommath performs + much better there. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="float_performance.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.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="rational_performance.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/perf/overhead.html b/libs/multiprecision/doc/html/boost_multiprecision/perf/overhead.html new file mode 100644 index 0000000000..0bda9c57c6 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/perf/overhead.html @@ -0,0 +1,200 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>The Overhead in the Number Class Wrapper</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../perf.html" title="Performance Comparison"> +<link rel="prev" href="../perf.html" title="Performance Comparison"> +<link rel="next" href="realworld.html" title="Floating-Point Real World Tests"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../perf.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.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="realworld.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.perf.overhead"></a><a class="link" href="overhead.html" title="The Overhead in the Number Class Wrapper">The Overhead in the + Number Class Wrapper</a> +</h3></div></div></div> +<p> + Using a simple <a href="../../../../performance/arithmetic_backend.hpp" target="_top">backend + class</a> that wraps any built in arithmetic type we can measure the + overhead involved in wrapping a type inside the <code class="computeroutput"><span class="identifier">number</span></code> + frontend, and the effect that turning on expression templates has. The following + table compares the performance between <code class="computeroutput"><span class="keyword">double</span></code> + and a <code class="computeroutput"><span class="keyword">double</span></code> wrapped inside + class <code class="computeroutput"><span class="identifier">number</span></code>: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Type + </p> + </th> +<th> + <p> + Bessel Function Evaluation + </p> + </th> +<th> + <p> + Non-Central T Evaluation + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">double</span></code> + </p> + </td> +<td> + <p> + <span class="bold"><strong>1.0 (0.016s)</strong></span> + </p> + </td> +<td> + <p> + <span class="bold"><strong>1.0</strong></span> (0.46s) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">arithmetic_backend</span><span class="special"><</span><span class="keyword">double</span><span class="special">>,</span> + <span class="identifier">et_off</span><span class="special">></span></code> + </p> + </td> +<td> + <p> + 1.2 (0.019s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1.0</strong></span>(0.46s) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">arithmetic_backend</span><span class="special"><</span><span class="keyword">double</span><span class="special">>,</span> + <span class="identifier">et_on</span><span class="special">></span></code> + </p> + </td> +<td> + <p> + 1.2 (0.019s) + </p> + </td> +<td> + <p> + 1.7 (0.79s) + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + As you can see whether or not there is an overhead, and how large it is depends + on the actual situation, but the overhead is in any cases small. Expression + templates generally add a greater overhead the more complex the expression + becomes due to the logic of figuring out how to best unpack and evaluate + the expression, but of course this is also the situation where you save more + temporaries. For a "trivial" backend like this, saving temporaries + has no benefit, but for larger types it becomes a bigger win. + </p> +<p> + The following table compares arithmetic using either <code class="computeroutput"><span class="keyword">long</span> + <span class="keyword">long</span></code> or <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">arithmetic_backend</span><span class="special"><</span><span class="keyword">long</span> <span class="keyword">long</span><span class="special">></span> <span class="special">></span></code> for the <a href="../../../../performance/voronoi_performance.cpp" target="_top">voronoi-diagram + builder test</a>: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Type + </p> + </th> +<th> + <p> + Relative time + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">long</span></code> + </p> + </td> +<td> + <p> + <span class="bold"><strong>1.0</strong></span>(0.0823s) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">arithmetic_backend</span><span class="special"><</span><span class="keyword">long</span> <span class="keyword">long</span><span class="special">>,</span> <span class="identifier">et_off</span><span class="special">></span></code> + </p> + </td> +<td> + <p> + 1.05 (0.0875s) + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + This test involves mainly creating a lot of temporaries and performing a + small amount of arithmetic on them, with very little difference in performance + between the native and "wrapped" types. + </p> +<p> + The test code was compiled with Microsoft Visual Studio 2010 with all optimisations + turned on (/Ox), and used MPIR-2.3.0 and <a href="http://libtom.org/?page=features&newsitems=5&whatfile=ltm" target="_top">libtommath</a>-0.42.0. + The tests were run on 32-bit Windows Vista machine. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../perf.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.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="realworld.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/perf/rational_performance.html b/libs/multiprecision/doc/html/boost_multiprecision/perf/rational_performance.html new file mode 100644 index 0000000000..00c65564ce --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/perf/rational_performance.html @@ -0,0 +1,1958 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Rational Type Performance</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../perf.html" title="Performance Comparison"> +<link rel="prev" href="integer_performance.html" title="Integer Algorithm Performance"> +<link rel="next" href="../map.html" title="Roadmap"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="integer_performance.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.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="../map.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.perf.rational_performance"></a><a class="link" href="rational_performance.html" title="Rational Type Performance">Rational + Type Performance</a> +</h3></div></div></div> +<p> + Note that these tests are carefully designed to test performance of the underlying + algorithms and not memory allocation or variable copying. As usual, performance + results should be taken with a healthy dose of scepticism, and real-world + performance may vary widely depending upon the specifics of the program. + In each table relative times are given first, with the best performer given + a score of 1. Total actual times are given in brackets, measured in seconds + for 500000 operations. + </p> +<div class="table"> +<a name="boost_multiprecision.perf.rational_performance.operator"></a><p class="title"><b>Table 1.66. Operator +</b></p> +<div class="table-contents"><table class="table" summary="Operator +"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_rational + </p> + </td> +<td> + <p> + 5.89417 (18.4116s) + </p> + </td> +<td> + <p> + 6.87256 (47.4698s) + </p> + </td> +<td> + <p> + 6.65008 (107.715s) + </p> + </td> +<td> + <p> + 6.53801 (256.244s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpq_rational + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (3.1237s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (6.90715s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (16.1975s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (39.1929s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.rational_performance.operator_int"></a><p class="title"><b>Table 1.67. Operator +(int)</b></p> +<div class="table-contents"><table class="table" summary="Operator +(int)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_rational + </p> + </td> +<td> + <p> + 3.62367 (2.46488s) + </p> + </td> +<td> + <p> + 4.18291 (2.94603s) + </p> + </td> +<td> + <p> + 4.726 (3.74866s) + </p> + </td> +<td> + <p> + 6.1388 (5.56817s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpq_rational + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.680215s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.704303s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.7932s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.907046s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long"></a><p class="title"><b>Table 1.68. Operator +(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator +(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_rational + </p> + </td> +<td> + <p> + 1.1527 (2.6378s) + </p> + </td> +<td> + <p> + 1.31751 (3.09863s) + </p> + </td> +<td> + <p> + 1.58996 (4.00714s) + </p> + </td> +<td> + <p> + 2.15642 (5.75702s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpq_rational + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (2.28837s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (2.35189s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (2.52028s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (2.66971s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long0"></a><p class="title"><b>Table 1.69. Operator +=(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator +=(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_rational + </p> + </td> +<td> + <p> + 1.18436 (2.7059s) + </p> + </td> +<td> + <p> + 1.32279 (3.11099s) + </p> + </td> +<td> + <p> + 1.61398 (4.05389s) + </p> + </td> +<td> + <p> + 2.20048 (5.84623s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpq_rational + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (2.2847s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (2.35183s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (2.51174s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (2.6568s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.rational_performance.operator0"></a><p class="title"><b>Table 1.70. Operator -</b></p> +<div class="table-contents"><table class="table" summary="Operator -"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_rational + </p> + </td> +<td> + <p> + 5.81893 (18.3457s) + </p> + </td> +<td> + <p> + 6.82209 (47.1928s) + </p> + </td> +<td> + <p> + 6.64143 (107.498s) + </p> + </td> +<td> + <p> + 6.51362 (255.137s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpq_rational + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (3.15277s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (6.91765s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (16.1859s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (39.1698s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.rational_performance.operator_int0"></a><p class="title"><b>Table 1.71. Operator -(int)</b></p> +<div class="table-contents"><table class="table" summary="Operator -(int)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_rational + </p> + </td> +<td> + <p> + 3.72441 (2.48756s) + </p> + </td> +<td> + <p> + 4.27663 (2.98713s) + </p> + </td> +<td> + <p> + 4.62109 (3.72114s) + </p> + </td> +<td> + <p> + 6.17605 (5.56503s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpq_rational + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.667908s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.698479s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.805252s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.901066s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long1"></a><p class="title"><b>Table 1.72. Operator -(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator -(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_rational + </p> + </td> +<td> + <p> + 1.15627 (2.63239s) + </p> + </td> +<td> + <p> + 1.32096 (3.12092s) + </p> + </td> +<td> + <p> + 1.61044 (4.00106s) + </p> + </td> +<td> + <p> + 2.19378 (5.7644s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpq_rational + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (2.27663s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (2.36262s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (2.48445s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (2.62761s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long2"></a><p class="title"><b>Table 1.73. Operator -=(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator -=(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_rational + </p> + </td> +<td> + <p> + 1.1984 (2.73444s) + </p> + </td> +<td> + <p> + 1.34141 (3.15698s) + </p> + </td> +<td> + <p> + 1.64159 (4.06997s) + </p> + </td> +<td> + <p> + 2.23017 (5.88108s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpq_rational + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (2.28174s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (2.35348s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (2.47929s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (2.63706s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.rational_performance.operator1"></a><p class="title"><b>Table 1.74. Operator *</b></p> +<div class="table-contents"><table class="table" summary="Operator *"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_rational + </p> + </td> +<td> + <p> + 5.4306 (32.5882s) + </p> + </td> +<td> + <p> + 6.91805 (89.9436s) + </p> + </td> +<td> + <p> + 6.94556 (207.307s) + </p> + </td> +<td> + <p> + 6.88704 (492.151s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpq_rational + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (6.00084s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (13.0013s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (29.8475s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (71.4604s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.rational_performance.operator_int1"></a><p class="title"><b>Table 1.75. Operator *(int)</b></p> +<div class="table-contents"><table class="table" summary="Operator *(int)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_rational + </p> + </td> +<td> + <p> + 2.12892 (2.51376s) + </p> + </td> +<td> + <p> + 2.47245 (3.07841s) + </p> + </td> +<td> + <p> + 2.86832 (3.93619s) + </p> + </td> +<td> + <p> + 3.94086 (6.02565s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpq_rational + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (1.18077s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (1.24508s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (1.3723s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (1.52902s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long3"></a><p class="title"><b>Table 1.76. Operator *(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator *(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_rational + </p> + </td> +<td> + <p> + 1.32254 (5.43565s) + </p> + </td> +<td> + <p> + 1.56078 (6.73163s) + </p> + </td> +<td> + <p> + 1.97701 (9.32522s) + </p> + </td> +<td> + <p> + 2.85404 (15.1573s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpq_rational + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (4.11002s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (4.313s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (4.71682s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (5.31082s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long4"></a><p class="title"><b>Table 1.77. Operator *=(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator *=(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_rational + </p> + </td> +<td> + <p> + 6.29806 (58.1188s) + </p> + </td> +<td> + <p> + 6.30556 (59.5076s) + </p> + </td> +<td> + <p> + 6.3385 (62.1007s) + </p> + </td> +<td> + <p> + 6.55345 (67.6905s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpq_rational + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (9.22804s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (9.43733s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (9.79739s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (10.329s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.rational_performance.operator2"></a><p class="title"><b>Table 1.78. Operator /</b></p> +<div class="table-contents"><table class="table" summary="Operator /"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_rational + </p> + </td> +<td> + <p> + 4.4269 (66.8031s) + </p> + </td> +<td> + <p> + 6.40103 (173.527s) + </p> + </td> +<td> + <p> + 6.32347 (348.193s) + </p> + </td> +<td> + <p> + 6.61148 (824.063s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpq_rational + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (15.0903s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (27.1093s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (55.0637s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (124.641s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.rational_performance.operator_int2"></a><p class="title"><b>Table 1.79. Operator /(int)</b></p> +<div class="table-contents"><table class="table" summary="Operator /(int)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_rational + </p> + </td> +<td> + <p> + 1.78772 (2.50984s) + </p> + </td> +<td> + <p> + 2.10623 (3.10606s) + </p> + </td> +<td> + <p> + 2.46986 (3.99358s) + </p> + </td> +<td> + <p> + 3.37428 (5.96678s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpq_rational + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (1.40393s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (1.4747s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (1.61693s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (1.76831s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long5"></a><p class="title"><b>Table 1.80. Operator /(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator /(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_rational + </p> + </td> +<td> + <p> + 1.29695 (5.45454s) + </p> + </td> +<td> + <p> + 1.55248 (6.85353s) + </p> + </td> +<td> + <p> + 1.93237 (9.28765s) + </p> + </td> +<td> + <p> + 2.75211 (14.8541s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpq_rational + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (4.20568s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (4.41458s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (4.80635s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (5.39734s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long6"></a><p class="title"><b>Table 1.81. Operator /=(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator /=(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_rational + </p> + </td> +<td> + <p> + 6.19401 (58.4278s) + </p> + </td> +<td> + <p> + 6.20135 (59.643s) + </p> + </td> +<td> + <p> + 6.21327 (62.0338s) + </p> + </td> +<td> + <p> + 6.40576 (67.6778s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpq_rational + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (9.43295s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (9.61774s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (9.98407s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (10.5652s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.rational_performance.operator_construct"></a><p class="title"><b>Table 1.82. Operator construct</b></p> +<div class="table-contents"><table class="table" summary="Operator construct"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_rational + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.00978288s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0100574s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0101393s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0101847s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpq_rational + </p> + </td> +<td> + <p> + 39.1516 (0.383015s) + </p> + </td> +<td> + <p> + 38.3523 (0.385725s) + </p> + </td> +<td> + <p> + 37.5812 (0.381048s) + </p> + </td> +<td> + <p> + 37.6007 (0.382953s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.rational_performance.operator_construct_unsigned"></a><p class="title"><b>Table 1.83. Operator construct(unsigned)</b></p> +<div class="table-contents"><table class="table" summary="Operator construct(unsigned)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_rational + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0548151s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0557542s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.055825s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0552808s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpq_rational + </p> + </td> +<td> + <p> + 7.21073 (0.395257s) + </p> + </td> +<td> + <p> + 7.1016 (0.395944s) + </p> + </td> +<td> + <p> + 7.02046 (0.391917s) + </p> + </td> +<td> + <p> + 7.16881 (0.396297s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.rational_performance.operator_construct_unsigned_long"></a><p class="title"><b>Table 1.84. Operator construct(unsigned long long)</b></p> +<div class="table-contents"><table class="table" summary="Operator construct(unsigned long long)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_rational + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0605156s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0616657s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0592056s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0603081s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpq_rational + </p> + </td> +<td> + <p> + 35.1604 (2.12775s) + </p> + </td> +<td> + <p> + 34.7575 (2.14335s) + </p> + </td> +<td> + <p> + 35.7232 (2.11502s) + </p> + </td> +<td> + <p> + 35.0437 (2.11342s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.rational_performance.operator_str"></a><p class="title"><b>Table 1.85. Operator str</b></p> +<div class="table-contents"><table class="table" summary="Operator str"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + 128 Bits + </p> + </th> +<th> + <p> + 256 Bits + </p> + </th> +<th> + <p> + 512 Bits + </p> + </th> +<th> + <p> + 1024 Bits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_rational + </p> + </td> +<td> + <p> + 5.48898 (0.0208949s) + </p> + </td> +<td> + <p> + 8.49668 (0.0546688s) + </p> + </td> +<td> + <p> + 10.107 (0.121897s) + </p> + </td> +<td> + <p> + 10.5339 (0.310584s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpq_rational + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0038067s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.00643413s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0120606s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1</strong></span> (0.0294843s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><p> + Test code was compiled with Microsoft Visual Studio 2010 with all optimisations + turned on (/Ox), and used MPIR-2.3.0 and <a href="http://www.mpfr.org" target="_top">MPFR</a>-3.0.0. + The tests were run on 32-bit Windows Vista machine. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="integer_performance.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.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="../map.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/perf/realworld.html b/libs/multiprecision/doc/html/boost_multiprecision/perf/realworld.html new file mode 100644 index 0000000000..a847792299 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/perf/realworld.html @@ -0,0 +1,284 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Floating-Point Real World Tests</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../perf.html" title="Performance Comparison"> +<link rel="prev" href="overhead.html" title="The Overhead in the Number Class Wrapper"> +<link rel="next" href="int_real_world.html" title="Integer Real World Tests"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="overhead.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.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="int_real_world.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.perf.realworld"></a><a class="link" href="realworld.html" title="Floating-Point Real World Tests">Floating-Point Real + World Tests</a> +</h3></div></div></div> +<p> + These tests test the total time taken to execute all of Boost.Math's test + cases for these functions. In each case the best performing library gets + a relative score of 1, with the total execution time given in brackets. The + first three libraries listed are the various floating point types provided + by this library, while for comparison, two popular C++ front-ends to <a href="http://www.mpfr.org" target="_top">MPFR</a> ( <a href="http://math.berkeley.edu/~wilken/code/gmpfrxx/" target="_top">mpfr_class</a> + and <a href="http://www.holoborodko.com/pavel/mpfr/" target="_top">mpreal</a>) are + also shown. + </p> +<div class="table"> +<a name="boost_multiprecision.perf.realworld.bessel_function_performance"></a><p class="title"><b>Table 1.12. Bessel Function Performance</b></p> +<div class="table-contents"><table class="table" summary="Bessel Function Performance"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Library + </p> + </th> +<th> + <p> + 50 Decimal Digits + </p> + </th> +<th> + <p> + 100 Decimal Digits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + mpfr_float + </p> + </td> +<td> + <p> + 1.2 (5.78s) + </p> + </td> +<td> + <p> + 1.2 (9.56s) + </p> + </td> +</tr> +<tr> +<td> + <p> + static_mpfr_float + </p> + </td> +<td> + <p> + 1.1 (5.47s) + </p> + </td> +<td> + <p> + 1.1 (9.09s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpf_float + </p> + </td> +<td> + <p> + <span class="bold"><strong>1.0</strong></span> (4.82s) + </p> + </td> +<td> + <p> + <span class="bold"><strong>1.0</strong></span>(8.07s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_dec_float + </p> + </td> +<td> + <p> + 1.8 (8.54s) + </p> + </td> +<td> + <p> + 2.6 (20.66s) + </p> + </td> +</tr> +<tr> +<td> + <p> + <a href="http://math.berkeley.edu/~wilken/code/gmpfrxx/" target="_top">mpfr_class</a> + </p> + </td> +<td> + <p> + 1.3 (6.28s) + </p> + </td> +<td> + <p> + 1.2(10.06s) + </p> + </td> +</tr> +<tr> +<td> + <p> + <a href="http://www.holoborodko.com/pavel/mpfr/" target="_top">mpreal</a> + </p> + </td> +<td> + <p> + 2.0 (9.54s) + </p> + </td> +<td> + <p> + 1.7 (14.08s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.perf.realworld.non_central_t_distribution_perfo"></a><p class="title"><b>Table 1.13. Non-Central T Distribution Performance</b></p> +<div class="table-contents"><table class="table" summary="Non-Central T Distribution Performance"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Library + </p> + </th> +<th> + <p> + 50 Decimal Digits + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + mpfr_float + </p> + </td> +<td> + <p> + 1.3 (263.27s) + </p> + </td> +</tr> +<tr> +<td> + <p> + static_mpfr_float + </p> + </td> +<td> + <p> + 1.2 (232.88s) + </p> + </td> +</tr> +<tr> +<td> + <p> + mpf_float + </p> + </td> +<td> + <p> + <span class="bold"><strong>1.0</strong></span> (195.73s) + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_dec_float + </p> + </td> +<td> + <p> + 1.9 (366.38s) + </p> + </td> +</tr> +<tr> +<td> + <p> + <a href="http://math.berkeley.edu/~wilken/code/gmpfrxx/" target="_top">mpfr_class</a> + </p> + </td> +<td> + <p> + 1.5 (286.94s) + </p> + </td> +</tr> +<tr> +<td> + <p> + <a href="http://www.holoborodko.com/pavel/mpfr/" target="_top">mpreal</a> + </p> + </td> +<td> + <p> + 2.0 (388.70s) + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><p> + Test code was compiled with Microsoft Visual Studio 2010 with all optimisations + turned on (/Ox), and used MPIR-2.3.0 and <a href="http://www.mpfr.org" target="_top">MPFR</a>-3.0.0. + The tests were run on 32-bit Windows Vista machine. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="overhead.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.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="int_real_world.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/ref.html b/libs/multiprecision/doc/html/boost_multiprecision/ref.html new file mode 100644 index 0000000000..0c1bc8b179 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/ref.html @@ -0,0 +1,57 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Reference</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="prev" href="tut/input_output.html" title="Input Output"> +<link rel="next" href="ref/number.html" title="number"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="tut/input_output.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="ref/number.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="boost_multiprecision.ref"></a><a class="link" href="ref.html" title="Reference">Reference</a> +</h2></div></div></div> +<div class="toc"><dl class="toc"> +<dt><span class="section"><a href="ref/number.html">number</a></span></dt> +<dt><span class="section"><a href="ref/cpp_int_ref.html">cpp_int</a></span></dt> +<dt><span class="section"><a href="ref/gmp_int_ref.html">gmp_int</a></span></dt> +<dt><span class="section"><a href="ref/tom_int_ref.html">tom_int</a></span></dt> +<dt><span class="section"><a href="ref/mpf_ref.html">gmp_float</a></span></dt> +<dt><span class="section"><a href="ref/mpfr_ref.html">mpfr_float_backend</a></span></dt> +<dt><span class="section"><a href="ref/cpp_bin_float_ref.html">cpp_bin_float</a></span></dt> +<dt><span class="section"><a href="ref/cpp_dec_ref.html">cpp_dec_float</a></span></dt> +<dt><span class="section"><a href="ref/internals.html">Internal Support + Code</a></span></dt> +<dt><span class="section"><a href="ref/backendconc.html">Backend Requirements</a></span></dt> +<dt><span class="section"><a href="ref/headers.html">Header File Structure</a></span></dt> +</dl></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="tut/input_output.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="ref/number.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/ref/backendconc.html b/libs/multiprecision/doc/html/boost_multiprecision/ref/backendconc.html new file mode 100644 index 0000000000..ff86a64dde --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/ref/backendconc.html @@ -0,0 +1,3970 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Backend Requirements</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="internals.html" title="Internal Support Code"> +<link rel="next" href="headers.html" title="Header File Structure"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="internals.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.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="headers.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.ref.backendconc"></a><a class="link" href="backendconc.html" title="Backend Requirements">Backend Requirements</a> +</h3></div></div></div> +<p> + The requirements on the <code class="computeroutput"><span class="identifier">Backend</span></code> + template argument to <code class="computeroutput"><span class="identifier">number</span></code> + are split up into sections: compulsory and optional. + </p> +<p> + Compulsory requirements have no default implementation in the library, therefore + if the feature they implement is to be supported at all, then they must be + implemented by the backend. + </p> +<p> + Optional requirements have default implementations that are called if the + backend doesn't provide it's own. Typically the backend will implement these + to improve performance. + </p> +<p> + In the following tables, type B is the <code class="computeroutput"><span class="identifier">Backend</span></code> + template argument to <code class="computeroutput"><span class="identifier">number</span></code>, + <code class="computeroutput"><span class="identifier">b</span></code> and <code class="computeroutput"><span class="identifier">b2</span></code> + are a variables of type B, <code class="computeroutput"><span class="identifier">cb</span></code>, + <code class="computeroutput"><span class="identifier">cb2</span></code> and <code class="computeroutput"><span class="identifier">cb3</span></code> + are constant variables of type <code class="computeroutput"><span class="keyword">const</span> + <span class="identifier">B</span></code>, <code class="computeroutput"><span class="identifier">rb</span></code> + is a variable of type <code class="computeroutput"><span class="identifier">B</span><span class="special">&&</span></code>, + <code class="computeroutput"><span class="identifier">a</span></code> and <code class="computeroutput"><span class="identifier">a2</span></code> + are variables of Arithmetic type, <code class="computeroutput"><span class="identifier">s</span></code> + is a variable of type <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span></code>, <code class="computeroutput"><span class="identifier">ui</span></code> is a variable of type <code class="computeroutput"><span class="keyword">unsigned</span></code>, <code class="computeroutput"><span class="identifier">bb</span></code> + is a variable of type <code class="computeroutput"><span class="keyword">bool</span></code>, + <code class="computeroutput"><span class="identifier">pa</span></code> is a variable of type + pointer-to-arithmetic-type, <code class="computeroutput"><span class="identifier">exp</span></code> + is a variable of type <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">exp_type</span></code>, <code class="computeroutput"><span class="identifier">pexp</span></code> + is a variable of type <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">exp_type</span><span class="special">*</span></code>, + <code class="computeroutput"><span class="identifier">i</span></code> is a variable of type + <code class="computeroutput"><span class="keyword">int</span></code>, <code class="computeroutput"><span class="identifier">pi</span></code> + pointer to a variable of type <code class="computeroutput"><span class="keyword">int</span></code>, + B2 is another type that meets these requirements, b2 is a variable of type + B2, <code class="computeroutput"><span class="identifier">ss</span></code> is variable of type + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span></code> and <code class="computeroutput"><span class="identifier">ff</span></code> + is a variable of type <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">::</span><span class="identifier">fmtflags</span></code>. + </p> +<div class="table"> +<a name="boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b"></a><p class="title"><b>Table 1.8. Compulsory Requirements on the Backend type.</b></p> +<div class="table-contents"><table class="table" summary="Compulsory Requirements on the Backend type."> +<colgroup> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Return Type + </p> + </th> +<th> + <p> + Comments + </p> + </th> +<th> + <p> + Throws + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">list</span><span class="special"><</span><span class="identifier">type</span><span class="special">-</span><span class="identifier">list</span><span class="special">></span></code> + </p> + </td> +<td> + <p> + A list of signed integral types that can be assigned to type B. + The types shall be listed in order of size, smallest first, and + shall terminate in the type that is <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">intmax_t</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">list</span><span class="special"><</span><span class="identifier">type</span><span class="special">-</span><span class="identifier">list</span><span class="special">></span></code> + </p> + </td> +<td> + <p> + A list of unsigned integral types that can be assigned to type + B. The types shall be listed in order of size, smallest first, + and shall terminate in the type that is <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">uintmax_t</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">list</span><span class="special"><</span><span class="identifier">type</span><span class="special">-</span><span class="identifier">list</span><span class="special">></span></code> + </p> + </td> +<td> + <p> + A list of floating-point types that can be assigned to type B.The + types shall be listed in order of size, smallest first, and shall + terminate in type <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">double</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">exponent_type</span></code> + </p> + </td> +<td> + <p> + A signed integral type. + </p> + </td> +<td> + <p> + The type of the exponent of type B. This type is required only + for floating point types. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">B</span><span class="special">()</span></code> + </p> + </td> +<td> + </td> +<td> + <p> + Default constructor. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">B</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + </td> +<td> + <p> + Copy Constructor. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">b</span> <span class="special">=</span> + <span class="identifier">b</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">B</span><span class="special">&</span></code> + </p> + </td> +<td> + <p> + Assignment operator. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">b</span> <span class="special">=</span> + <span class="identifier">a</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">B</span><span class="special">&</span></code> + </p> + </td> +<td> + <p> + Assignment from an Arithmetic type. The type of <code class="computeroutput"><span class="identifier">a</span></code> + shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">b</span> <span class="special">=</span> + <span class="identifier">s</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">B</span><span class="special">&</span></code> + </p> + </td> +<td> + <p> + Assignment from a string. + </p> + </td> +<td> + <p> + Throws a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> if the string could + not be interpreted as a valid number. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">b</span><span class="special">.</span><span class="identifier">swap</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Swaps the contents of its arguments. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">noexcept</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">str</span><span class="special">(</span><span class="identifier">ss</span><span class="special">,</span> + <span class="identifier">ff</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span></code> + </p> + </td> +<td> + <p> + Returns the string representation of <code class="computeroutput"><span class="identifier">b</span></code> + with <code class="computeroutput"><span class="identifier">ss</span></code> digits + and formatted according to the flags set in <code class="computeroutput"><span class="identifier">ff</span></code>. + If <code class="computeroutput"><span class="identifier">ss</span></code> is zero, + then returns as many digits as are required to reconstruct the + original value. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">b</span><span class="special">.</span><span class="identifier">negate</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Negates <code class="computeroutput"><span class="identifier">b</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">cb2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">int</span></code> + </p> + </td> +<td> + <p> + Compares <code class="computeroutput"><span class="identifier">cb</span></code> and + <code class="computeroutput"><span class="identifier">cb2</span></code>, returns a + value less than zero if <code class="computeroutput"><span class="identifier">cb</span> + <span class="special"><</span> <span class="identifier">cb2</span></code>, + a value greater than zero if <code class="computeroutput"><span class="identifier">cb</span> + <span class="special">></span> <span class="identifier">cb2</span></code> + and zero if <code class="computeroutput"><span class="identifier">cb</span> <span class="special">==</span> <span class="identifier">cb2</span></code>. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">noexcept</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">int</span></code> + </p> + </td> +<td> + <p> + Compares <code class="computeroutput"><span class="identifier">cb</span></code> and + <code class="computeroutput"><span class="identifier">a</span></code>, returns a value + less than zero if <code class="computeroutput"><span class="identifier">cb</span> + <span class="special"><</span> <span class="identifier">a</span></code>, + a value greater than zero if <code class="computeroutput"><span class="identifier">cb</span> + <span class="special">></span> <span class="identifier">a</span></code> + and zero if <code class="computeroutput"><span class="identifier">cb</span> <span class="special">==</span> <span class="identifier">a</span></code>. + The type of <code class="computeroutput"><span class="identifier">a</span></code> shall + be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Adds <code class="computeroutput"><span class="identifier">cb</span></code> to <code class="computeroutput"><span class="identifier">b</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Subtracts <code class="computeroutput"><span class="identifier">cb</span></code> from + <code class="computeroutput"><span class="identifier">b</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Multiplies <code class="computeroutput"><span class="identifier">b</span></code> by + <code class="computeroutput"><span class="identifier">cb</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Divides <code class="computeroutput"><span class="identifier">b</span></code> by <code class="computeroutput"><span class="identifier">cb</span></code>. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if cb has the + value zero, and <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">number</span><span class="special"><</span><span class="identifier">B</span><span class="special">></span> <span class="special">>::</span><span class="identifier">has_infinity</span> <span class="special">==</span> + <span class="keyword">false</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">%=</span> + <span class="identifier">cb</span></code>, only required when + <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if cb has the + value zero. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">&=</span> + <span class="identifier">cb</span></code>, only required when + <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">|=</span> + <span class="identifier">cb</span></code>, only required when + <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">^=</span> + <span class="identifier">cb</span></code>, only required when + <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_complement</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes the ones-complement of <code class="computeroutput"><span class="identifier">cb</span></code> + and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>, + only required when <code class="computeroutput"><span class="identifier">B</span></code> + is an integer type. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_left_shift</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special"><<=</span> + <span class="identifier">ui</span></code>, only required when + <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_right_shift</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">>>=</span> + <span class="identifier">ui</span></code>, only required when + <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_convert_to</span><span class="special">(</span><span class="identifier">pa</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Converts <code class="computeroutput"><span class="identifier">cb</span></code> to + the type of <code class="computeroutput"><span class="special">*</span><span class="identifier">pa</span></code> + and store the result in <code class="computeroutput"><span class="special">*</span><span class="identifier">pa</span></code>. Type <code class="computeroutput"><span class="identifier">B</span></code> + shall support conversion to at least types <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">intmax_t</span></code>, + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">uintmax_t</span></code> and <code class="computeroutput"><span class="keyword">long</span> + <span class="keyword">long</span></code>. Conversion to other + arithmetic types can then be synthesised using other operations. + Conversions to other types are entirely optional. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_frexp</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">pexp</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Stores values in <code class="computeroutput"><span class="identifier">b</span></code> + and <code class="computeroutput"><span class="special">*</span><span class="identifier">pexp</span></code> + such that the value of <code class="computeroutput"><span class="identifier">cb</span></code> + is b * 2<sup>*pexp</sup>, only required when <code class="computeroutput"><span class="identifier">B</span></code> + is a floating-point type. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_ldexp</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">exp</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Stores a value in <code class="computeroutput"><span class="identifier">b</span></code> + that is cb * 2<sup>exp</sup>, only required when <code class="computeroutput"><span class="identifier">B</span></code> + is a floating-point type. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_frexp</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">pi</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Stores values in <code class="computeroutput"><span class="identifier">b</span></code> + and <code class="computeroutput"><span class="special">*</span><span class="identifier">pi</span></code> + such that the value of <code class="computeroutput"><span class="identifier">cb</span></code> + is b * 2<sup>*pi</sup>, only required when <code class="computeroutput"><span class="identifier">B</span></code> + is a floating-point type. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> if the exponent + of cb is too large to be stored in an <code class="computeroutput"><span class="keyword">int</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_ldexp</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">i</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Stores a value in <code class="computeroutput"><span class="identifier">b</span></code> + that is cb * 2<sup>i</sup>, only required when <code class="computeroutput"><span class="identifier">B</span></code> + is a floating-point type. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_floor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Stores the floor of <code class="computeroutput"><span class="identifier">cb</span></code> + in <code class="computeroutput"><span class="identifier">b</span></code>, only required + when <code class="computeroutput"><span class="identifier">B</span></code> is a floating-point + type. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_ceil</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Stores the ceiling of <code class="computeroutput"><span class="identifier">cb</span></code> + in <code class="computeroutput"><span class="identifier">b</span></code>, only required + when <code class="computeroutput"><span class="identifier">B</span></code> is a floating-point + type. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_sqrt</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Stores the square root of <code class="computeroutput"><span class="identifier">cb</span></code> + in <code class="computeroutput"><span class="identifier">b</span></code>, only required + when <code class="computeroutput"><span class="identifier">B</span></code> is a floating-point + type. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">number_category</span><span class="special"><</span><span class="identifier">B</span><span class="special">>::</span><span class="identifier">type</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">N</span></code> is one of the + values <code class="computeroutput"><span class="identifier">number_kind_integer</span></code>, + <code class="computeroutput"><span class="identifier">number_kind_floating_point</span></code>, + <code class="computeroutput"><span class="identifier">number_kind_rational</span></code> + or <code class="computeroutput"><span class="identifier">number_kind_fixed_point</span></code>. + Defaults to <code class="computeroutput"><span class="identifier">number_kind_floating_point</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac"></a><p class="title"><b>Table 1.9. Optional Requirements on the Backend Type</b></p> +<div class="table-contents"><table class="table" summary="Optional Requirements on the Backend Type"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Returns + </p> + </th> +<th> + <p> + Comments + </p> + </th> +<th> + <p> + Throws + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <span class="emphasis"><em>Construct and assign:</em></span> + </p> + </td> +<td class="auto-generated"> </td> +<td class="auto-generated"> </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">B</span><span class="special">(</span><span class="identifier">rb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">B</span></code> + </p> + </td> +<td> + <p> + Move constructor. Afterwards variable <code class="computeroutput"><span class="identifier">rb</span></code> + shall be in sane state, albeit with unspecified value. Only destruction + and assignment to the moved-from variable <code class="computeroutput"><span class="identifier">rb</span></code> + need be supported after the operation. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">noexcept</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">b</span> <span class="special">=</span> + <span class="identifier">rb</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">B</span><span class="special">&</span></code> + </p> + </td> +<td> + <p> + Move-assign. Afterwards variable <code class="computeroutput"><span class="identifier">rb</span></code> + shall be in sane state, albeit with unspecified value. Only destruction + and assignment to the moved-from variable <code class="computeroutput"><span class="identifier">rb</span></code> + need be supported after the operation. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">noexcept</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">B</span></code> + </p> + </td> +<td> + <p> + Direct construction from an arithmetic type. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the + type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> + or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + this operation is simulated using default-construction followed + by assignment. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">B</span><span class="special">(</span><span class="identifier">b2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">B</span></code> + </p> + </td> +<td> + <p> + Copy constructor from a different back-end type. When not provided, + a generic interconversion routine is used. This constructor may + be <code class="computeroutput"><span class="keyword">explicit</span></code> if the + corresponding frontend constructor should also be <code class="computeroutput"><span class="keyword">explicit</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">b</span> <span class="special">=</span> + <span class="identifier">b2</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">b</span><span class="special">&</span></code> + </p> + </td> +<td> + <p> + Assignment operator from a different back-end type. When not provided, + a generic interconversion routine is used. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">assign_components</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Assigns to <code class="computeroutput"><span class="identifier">b</span></code> the + two components in the following arguments. Only applies to rational + and complex number types. When not provided, arithmetic operations + are used to synthesise the result from the two values. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">assign_components</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">b2</span><span class="special">,</span> <span class="identifier">b2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Assigns to <code class="computeroutput"><span class="identifier">b</span></code> the + two components in the following arguments. Only applies to rational + and complex number types. When not provided, arithmetic operations + are used to synthesise the result from the two values. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <span class="emphasis"><em>Comparisons:</em></span> + </p> + </td> +<td class="auto-generated"> </td> +<td class="auto-generated"> </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_eq</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">cb2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">bool</span></code> + </p> + </td> +<td> + <p> + Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> and <code class="computeroutput"><span class="identifier">cb2</span></code> + are equal in value. When not provided, the default implementation + returns <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">cb2</span><span class="special">)</span> + <span class="special">==</span> <span class="number">0</span></code>. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">noexcept</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_eq</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">bool</span></code> + </p> + </td> +<td> + <p> + Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> and <code class="computeroutput"><span class="identifier">a</span></code> + are equal in value. The type of <code class="computeroutput"><span class="identifier">a</span></code> + shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + return the equivalent of <code class="computeroutput"><span class="identifier">eval_eq</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_eq</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">bool</span></code> + </p> + </td> +<td> + <p> + Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> and <code class="computeroutput"><span class="identifier">a</span></code> + are equal in value. The type of <code class="computeroutput"><span class="identifier">a</span></code> + shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + the default version returns <code class="computeroutput"><span class="identifier">eval_eq</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_lt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">cb2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">bool</span></code> + </p> + </td> +<td> + <p> + Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> is less than <code class="computeroutput"><span class="identifier">cb2</span></code> in value. When not provided, + the default implementation returns <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">cb2</span><span class="special">)</span> <span class="special"><</span> + <span class="number">0</span></code>. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">noexcept</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_lt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">bool</span></code> + </p> + </td> +<td> + <p> + Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> is less than <code class="computeroutput"><span class="identifier">a</span></code> in value. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the + type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> + or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + the default implementation returns <code class="computeroutput"><span class="identifier">eval_lt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_lt</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">bool</span></code> + </p> + </td> +<td> + <p> + Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> is less than <code class="computeroutput"><span class="identifier">cb</span></code> in value. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the + type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> + or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + the default implementation returns <code class="computeroutput"><span class="identifier">eval_gt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_gt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">cb2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">bool</span></code> + </p> + </td> +<td> + <p> + Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> is greater than <code class="computeroutput"><span class="identifier">cb2</span></code> in value. When not provided, + the default implementation returns <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">cb2</span><span class="special">)</span> <span class="special">></span> + <span class="number">0</span></code>. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">noexcept</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_gt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">bool</span></code> + </p> + </td> +<td> + <p> + Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> is greater than <code class="computeroutput"><span class="identifier">a</span></code> in value. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the + type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> + or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + the default implementation returns <code class="computeroutput"><span class="identifier">eval_gt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_gt</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">bool</span></code> + </p> + </td> +<td> + <p> + Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> is greater than <code class="computeroutput"><span class="identifier">cb</span></code> in value. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the + type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> + or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + the default implementation returns <code class="computeroutput"><span class="identifier">eval_lt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_is_zero</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">bool</span></code> + </p> + </td> +<td> + <p> + Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> is zero, otherwise <code class="computeroutput"><span class="keyword">false</span></code>. The default version of this + function returns <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">ui_type</span><span class="special">(</span><span class="number">0</span><span class="special">))</span> <span class="special">==</span> + <span class="number">0</span></code>, where <code class="computeroutput"><span class="identifier">ui_type</span></code> + is <code class="computeroutput"><span class="identifier">ui_type</span></code> is + <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">front</span><span class="special"><</span><span class="keyword">typename</span> + <span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span><span class="special">>::</span><span class="identifier">type</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_get_sign</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">int</span></code> + </p> + </td> +<td> + <p> + Returns a value < zero if <code class="computeroutput"><span class="identifier">cb</span></code> + is negative, a value > zero if <code class="computeroutput"><span class="identifier">cb</span></code> + is positive, and zero if <code class="computeroutput"><span class="identifier">cb</span></code> + is zero. The default version of this function returns <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">ui_type</span><span class="special">(</span><span class="number">0</span><span class="special">))</span></code>, + where <code class="computeroutput"><span class="identifier">ui_type</span></code> is + <code class="computeroutput"><span class="identifier">ui_type</span></code> is <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">front</span><span class="special"><</span><span class="keyword">typename</span> + <span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span><span class="special">>::</span><span class="identifier">type</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <span class="emphasis"><em>Basic arithmetic:</em></span> + </p> + </td> +<td class="auto-generated"> </td> +<td class="auto-generated"> </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Adds <code class="computeroutput"><span class="identifier">a</span></code> to <code class="computeroutput"><span class="identifier">b</span></code>. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the + type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> + or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + the default version calls <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code> + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">cb2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Add <code class="computeroutput"><span class="identifier">cb</span></code> to <code class="computeroutput"><span class="identifier">cb2</span></code> and stores the result in + <code class="computeroutput"><span class="identifier">b</span></code>. When not provided, + does the equivalent of <code class="computeroutput"><span class="identifier">b</span> + <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Add <code class="computeroutput"><span class="identifier">cb</span></code> to <code class="computeroutput"><span class="identifier">a</span></code> and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the + type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> + or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + does the equivalent of <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Add <code class="computeroutput"><span class="identifier">a</span></code> to <code class="computeroutput"><span class="identifier">cb</span></code> and stores the result in + <code class="computeroutput"><span class="identifier">b</span></code>. The type of + <code class="computeroutput"><span class="identifier">a</span></code> shall be listed + in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + does the equivalent of <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Subtracts <code class="computeroutput"><span class="identifier">a</span></code> from + <code class="computeroutput"><span class="identifier">b</span></code>. The type of + <code class="computeroutput"><span class="identifier">a</span></code> shall be listed + in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + the default version calls <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code> + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">cb2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Subtracts <code class="computeroutput"><span class="identifier">cb2</span></code> from + <code class="computeroutput"><span class="identifier">cb</span></code> and stores the + result in <code class="computeroutput"><span class="identifier">b</span></code>. When + not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span> + <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Subtracts <code class="computeroutput"><span class="identifier">a</span></code> from + <code class="computeroutput"><span class="identifier">cb</span></code> and stores the + result in <code class="computeroutput"><span class="identifier">b</span></code>. The + type of <code class="computeroutput"><span class="identifier">a</span></code> shall + be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + does the equivalent of <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Subtracts <code class="computeroutput"><span class="identifier">cb</span></code> from + <code class="computeroutput"><span class="identifier">a</span></code> and stores the + result in <code class="computeroutput"><span class="identifier">b</span></code>. The + type of <code class="computeroutput"><span class="identifier">a</span></code> shall + be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + does the equivalent of <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">);</span> <span class="identifier">b</span><span class="special">.</span><span class="identifier">negate</span><span class="special">();</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Multiplies <code class="computeroutput"><span class="identifier">b</span></code> by + <code class="computeroutput"><span class="identifier">a</span></code>. The type of + <code class="computeroutput"><span class="identifier">a</span></code> shall be listed + in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + the default version calls <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code> + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">cb2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Multiplies <code class="computeroutput"><span class="identifier">cb</span></code> by + <code class="computeroutput"><span class="identifier">cb2</span></code> and stores + the result in <code class="computeroutput"><span class="identifier">b</span></code>. + When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span> + <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Multiplies <code class="computeroutput"><span class="identifier">cb</span></code> by + <code class="computeroutput"><span class="identifier">a</span></code> and stores the + result in <code class="computeroutput"><span class="identifier">b</span></code>. The + type of <code class="computeroutput"><span class="identifier">a</span></code> shall + be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + does the equivalent of <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Multiplies <code class="computeroutput"><span class="identifier">a</span></code> by + <code class="computeroutput"><span class="identifier">cb</span></code> and stores the + result in <code class="computeroutput"><span class="identifier">b</span></code>. The + type of <code class="computeroutput"><span class="identifier">a</span></code> shall + be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + does the equivalent of <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_multiply_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Multiplies <code class="computeroutput"><span class="identifier">cb</span></code> by + <code class="computeroutput"><span class="identifier">cb2</span></code> and adds the + result to <code class="computeroutput"><span class="identifier">b</span></code>. When + not provided does the equivalent of creating a temporary <code class="computeroutput"><span class="identifier">B</span> <span class="identifier">t</span></code> + and <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code> followed by <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">t</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_multiply_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Multiplies <code class="computeroutput"><span class="identifier">a</span></code> by + <code class="computeroutput"><span class="identifier">cb</span></code> and adds the + result to <code class="computeroutput"><span class="identifier">b</span></code>. The + type of <code class="computeroutput"><span class="identifier">a</span></code> shall + be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided + does the equivalent of creating a temporary <code class="computeroutput"><span class="identifier">B</span> + <span class="identifier">t</span></code> and <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code> followed by <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">t</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_multiply_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Multiplies <code class="computeroutput"><span class="identifier">a</span></code> by + <code class="computeroutput"><span class="identifier">cb</span></code> and adds the + result to <code class="computeroutput"><span class="identifier">b</span></code>. The + type of <code class="computeroutput"><span class="identifier">a</span></code> shall + be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided + does the equivalent of <code class="computeroutput"><span class="identifier">eval_multiply_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_multiply_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Multiplies <code class="computeroutput"><span class="identifier">cb</span></code> by + <code class="computeroutput"><span class="identifier">cb2</span></code> and subtracts + the result from <code class="computeroutput"><span class="identifier">b</span></code>. + When not provided does the equivalent of creating a temporary + <code class="computeroutput"><span class="identifier">B</span> <span class="identifier">t</span></code> + and <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code> followed by <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">t</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_multiply_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Multiplies <code class="computeroutput"><span class="identifier">a</span></code> by + <code class="computeroutput"><span class="identifier">cb</span></code> and subtracts + the result from <code class="computeroutput"><span class="identifier">b</span></code>. + The type of <code class="computeroutput"><span class="identifier">a</span></code> shall + be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided + does the equivalent of creating a temporary <code class="computeroutput"><span class="identifier">B</span> + <span class="identifier">t</span></code> and <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code> followed by <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">t</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_multiply_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Multiplies <code class="computeroutput"><span class="identifier">a</span></code> by + <code class="computeroutput"><span class="identifier">cb</span></code> and subtracts + the result from <code class="computeroutput"><span class="identifier">b</span></code>. + The type of <code class="computeroutput"><span class="identifier">a</span></code> shall + be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided + does the equivalent of <code class="computeroutput"><span class="identifier">eval_multiply_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_multiply_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">,</span> <span class="identifier">cb3</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Multiplies <code class="computeroutput"><span class="identifier">cb</span></code> by + <code class="computeroutput"><span class="identifier">cb2</span></code> and adds the + result to <code class="computeroutput"><span class="identifier">cb3</span></code> storing + the result in <code class="computeroutput"><span class="identifier">b</span></code>. + When not provided does the equivalent of <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code> followed by <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb3</span><span class="special">)</span></code>. For brevity, only a version showing + all arguments of type <code class="computeroutput"><span class="identifier">B</span></code> + is shown here, but you can replace up to any 2 of <code class="computeroutput"><span class="identifier">cb</span></code>, <code class="computeroutput"><span class="identifier">cb2</span></code> + and <code class="computeroutput"><span class="identifier">cb3</span></code> with any + type listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_multiply_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">,</span> <span class="identifier">cb3</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Multiplies <code class="computeroutput"><span class="identifier">cb</span></code> by + <code class="computeroutput"><span class="identifier">cb2</span></code> and subtracts + from the result <code class="computeroutput"><span class="identifier">cb3</span></code> + storing the result in <code class="computeroutput"><span class="identifier">b</span></code>. + When not provided does the equivalent of <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code> followed by <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb3</span><span class="special">)</span></code>. For brevity, only a version showing + all arguments of type <code class="computeroutput"><span class="identifier">B</span></code> + is shown here, but you can replace up to any 2 of <code class="computeroutput"><span class="identifier">cb</span></code>, <code class="computeroutput"><span class="identifier">cb2</span></code> + and <code class="computeroutput"><span class="identifier">cb3</span></code> with any + type listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Divides <code class="computeroutput"><span class="identifier">b</span></code> by <code class="computeroutput"><span class="identifier">a</span></code>. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the + type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> + or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + the default version calls <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero, and <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">number</span><span class="special"><</span><span class="identifier">B</span><span class="special">></span> + <span class="special">>::</span><span class="identifier">has_infinity</span> + <span class="special">==</span> <span class="keyword">false</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">cb2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Divides <code class="computeroutput"><span class="identifier">cb</span></code> by + <code class="computeroutput"><span class="identifier">cb2</span></code> and stores + the result in <code class="computeroutput"><span class="identifier">b</span></code>. + When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span> + <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">cb2</span></code> has the value zero, and + <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">number</span><span class="special"><</span><span class="identifier">B</span><span class="special">></span> + <span class="special">>::</span><span class="identifier">has_infinity</span> + <span class="special">==</span> <span class="keyword">false</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Divides <code class="computeroutput"><span class="identifier">cb</span></code> by + <code class="computeroutput"><span class="identifier">a</span></code> and stores the + result in <code class="computeroutput"><span class="identifier">b</span></code>. The + type of <code class="computeroutput"><span class="identifier">a</span></code> shall + be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + does the equivalent of <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero, and <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">number</span><span class="special"><</span><span class="identifier">B</span><span class="special">></span> + <span class="special">>::</span><span class="identifier">has_infinity</span> + <span class="special">==</span> <span class="keyword">false</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Divides <code class="computeroutput"><span class="identifier">a</span></code> by <code class="computeroutput"><span class="identifier">cb</span></code> and stores the result in + <code class="computeroutput"><span class="identifier">b</span></code>. The type of + <code class="computeroutput"><span class="identifier">a</span></code> shall be listed + in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + does the equivalent of <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">),</span> <span class="identifier">cb</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if cb has the + value zero, and <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">number</span><span class="special"><</span><span class="identifier">B</span><span class="special">></span> <span class="special">>::</span><span class="identifier">has_infinity</span> <span class="special">==</span> + <span class="keyword">false</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_increment</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + void + </p> + </td> +<td> + <p> + Increments the value of <code class="computeroutput"><span class="identifier">b</span></code> + by one. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">ui_type</span><span class="special">>(</span><span class="number">1u</span><span class="special">))</span></code>. + Where <code class="computeroutput"><span class="identifier">ui_type</span></code> is + <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">front</span><span class="special"><</span><span class="keyword">typename</span> + <span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span><span class="special">>::</span><span class="identifier">type</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_decrement</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + void + </p> + </td> +<td> + <p> + Decrements the value of <code class="computeroutput"><span class="identifier">b</span></code> + by one. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">ui_type</span><span class="special">>(</span><span class="number">1u</span><span class="special">))</span></code>. + Where <code class="computeroutput"><span class="identifier">ui_type</span></code> is + <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">front</span><span class="special"><</span><span class="keyword">typename</span> + <span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span><span class="special">>::</span><span class="identifier">type</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <span class="emphasis"><em>Integer specific operations:</em></span> + </p> + </td> +<td class="auto-generated"> </td> +<td class="auto-generated"> </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">%=</span> + <span class="identifier">cb</span></code>, only required when + <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. The type of <code class="computeroutput"><span class="identifier">a</span></code> + shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + the default version calls <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">cb2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">%</span> + <span class="identifier">cb2</span></code> and stores the result + in <code class="computeroutput"><span class="identifier">b</span></code>, only required + when <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span> + <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">%</span> + <span class="identifier">a</span></code> and stores the result + in <code class="computeroutput"><span class="identifier">b</span></code>, only required + when <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. The type of <code class="computeroutput"><span class="identifier">a</span></code> + shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + does the equivalent of <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">%</span> + <span class="identifier">a</span></code> and stores the result + in <code class="computeroutput"><span class="identifier">b</span></code>, only required + when <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. The type of <code class="computeroutput"><span class="identifier">a</span></code> + shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + does the equivalent of <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">),</span> <span class="identifier">cb</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">&=</span> + <span class="identifier">cb</span></code>, only required when + <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. The type of <code class="computeroutput"><span class="identifier">a</span></code> + shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + the default version calls <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code> + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">&</span> + <span class="identifier">cb2</span></code> and stores the result + in <code class="computeroutput"><span class="identifier">b</span></code>, only required + when <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span> + <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">&</span> + <span class="identifier">a</span></code> and stores the result + in <code class="computeroutput"><span class="identifier">b</span></code>, only required + when <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. The type of <code class="computeroutput"><span class="identifier">a</span></code> + shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + does the equivalent of <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">&</span> + <span class="identifier">a</span></code> and stores the result + in <code class="computeroutput"><span class="identifier">b</span></code>, only required + when <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. The type of <code class="computeroutput"><span class="identifier">a</span></code> + shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + does the equivalent of <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">|=</span> + <span class="identifier">cb</span></code>, only required when + <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. The type of <code class="computeroutput"><span class="identifier">a</span></code> + shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + the default version calls <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code> + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">|</span> + <span class="identifier">cb2</span></code> and stores the result + in <code class="computeroutput"><span class="identifier">b</span></code>, only required + when <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span> + <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">|</span> + <span class="identifier">a</span></code> and stores the result + in <code class="computeroutput"><span class="identifier">b</span></code>, only required + when <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. The type of <code class="computeroutput"><span class="identifier">a</span></code> + shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + does the equivalent of <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">|</span> + <span class="identifier">a</span></code> and stores the result + in <code class="computeroutput"><span class="identifier">b</span></code>, only required + when <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. The type of <code class="computeroutput"><span class="identifier">a</span></code> + shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + does the equivalent of <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">^=</span> + <span class="identifier">cb</span></code>, only required when + <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. The type of <code class="computeroutput"><span class="identifier">a</span></code> + shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + the default version calls <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code> + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">^</span> + <span class="identifier">cb2</span></code> and stores the result + in <code class="computeroutput"><span class="identifier">b</span></code>, only required + when <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span> + <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">^</span> + <span class="identifier">a</span></code> and stores the result + in <code class="computeroutput"><span class="identifier">b</span></code>, only required + when <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. The type of <code class="computeroutput"><span class="identifier">a</span></code> + shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + does the equivalent of <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes <code class="computeroutput"><span class="identifier">a</span> <span class="special">^</span> + <span class="identifier">cb</span></code> and stores the result + in <code class="computeroutput"><span class="identifier">b</span></code>, only required + when <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. The type of <code class="computeroutput"><span class="identifier">a</span></code> + shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided, + does the equivalent of <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_left_shift</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special"><<</span> + <span class="identifier">ui</span></code> and stores the result + in <code class="computeroutput"><span class="identifier">b</span></code>, only required + when <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span> + <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_left_shift</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">);</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_right_shift</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">>></span> + <span class="identifier">ui</span></code> and stores the result + in <code class="computeroutput"><span class="identifier">b</span></code>, only required + when <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span> + <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_right_shift</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">);</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_qr</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">cb2</span><span class="special">,</span> + <span class="identifier">b</span><span class="special">,</span> + <span class="identifier">b2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Sets <code class="computeroutput"><span class="identifier">b</span></code> to the result + of <code class="computeroutput"><span class="identifier">cb</span> <span class="special">/</span> + <span class="identifier">cb2</span></code> and <code class="computeroutput"><span class="identifier">b2</span></code> to the result of <code class="computeroutput"><span class="identifier">cb</span> <span class="special">%</span> + <span class="identifier">cb2</span></code>. Only required when + <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. The default version of this function is synthesised from + other operations above. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_integer_modulus</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span></code> + </p> + </td> +<td> + <p> + Returns the result of <code class="computeroutput"><span class="identifier">cb</span> + <span class="special">%</span> <span class="identifier">ui</span></code>. + Only required when <code class="computeroutput"><span class="identifier">B</span></code> + is an integer type. The default version of this function is synthesised + from other operations above. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_lsb</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span></code> + </p> + </td> +<td> + <p> + Returns the index of the least significant bit that is set. Only + required when <code class="computeroutput"><span class="identifier">B</span></code> + is an integer type. The default version of this function is synthesised + from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_msb</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span></code> + </p> + </td> +<td> + <p> + Returns the index of the most significant bit that is set. Only + required when <code class="computeroutput"><span class="identifier">B</span></code> + is an integer type. The default version of this function is synthesised + from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_bit_test</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">ui</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">bool</span></code> + </p> + </td> +<td> + <p> + Returns true if <code class="computeroutput"><span class="identifier">cb</span></code> + has bit <code class="computeroutput"><span class="identifier">ui</span></code> set. + Only required when <code class="computeroutput"><span class="identifier">B</span></code> + is an integer type. The default version of this function is synthesised + from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_bit_set</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">ui</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Sets the bit at index <code class="computeroutput"><span class="identifier">ui</span></code> + in <code class="computeroutput"><span class="identifier">b</span></code>. Only required + when <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. The default version of this function is synthesised from + other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_bit_unset</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Unsets the bit at index <code class="computeroutput"><span class="identifier">ui</span></code> + in <code class="computeroutput"><span class="identifier">b</span></code>. Only required + when <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. The default version of this function is synthesised from + other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_bit_flip</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">ui</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Flips the bit at index <code class="computeroutput"><span class="identifier">ui</span></code> + in <code class="computeroutput"><span class="identifier">b</span></code>. Only required + when <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. The default version of this function is synthesised from + other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_gcd</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">cb2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Sets <code class="computeroutput"><span class="identifier">b</span></code> to the greatest + common divisor of <code class="computeroutput"><span class="identifier">cb</span></code> + and <code class="computeroutput"><span class="identifier">cb2</span></code>. Only required + when <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. The default version of this function is synthesised from + other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_lcm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">cb2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Sets <code class="computeroutput"><span class="identifier">b</span></code> to the least + common multiple of <code class="computeroutput"><span class="identifier">cb</span></code> + and <code class="computeroutput"><span class="identifier">cb2</span></code>. Only required + when <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. The default version of this function is synthesised from + other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_gcd</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Sets <code class="computeroutput"><span class="identifier">b</span></code> to the greatest + common divisor of <code class="computeroutput"><span class="identifier">cb</span></code> + and <code class="computeroutput"><span class="identifier">cb2</span></code>. Only required + when <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. The type of <code class="computeroutput"><span class="identifier">a</span></code> + shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. The default version + of this function calls <code class="computeroutput"><span class="identifier">eval_gcd</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_lcm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Sets <code class="computeroutput"><span class="identifier">b</span></code> to the least + common multiple of <code class="computeroutput"><span class="identifier">cb</span></code> + and <code class="computeroutput"><span class="identifier">cb2</span></code>. Only required + when <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. The type of <code class="computeroutput"><span class="identifier">a</span></code> + shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. The default version + of this function calls <code class="computeroutput"><span class="identifier">eval_lcm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_gcd</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Sets <code class="computeroutput"><span class="identifier">b</span></code> to the greatest + common divisor of <code class="computeroutput"><span class="identifier">cb</span></code> + and <code class="computeroutput"><span class="identifier">a</span></code>. Only required + when <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. The type of <code class="computeroutput"><span class="identifier">a</span></code> + shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. The default version + of this function calls <code class="computeroutput"><span class="identifier">eval_gcd</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_lcm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Sets <code class="computeroutput"><span class="identifier">b</span></code> to the least + common multiple of <code class="computeroutput"><span class="identifier">cb</span></code> + and <code class="computeroutput"><span class="identifier">a</span></code>. Only required + when <code class="computeroutput"><span class="identifier">B</span></code> is an integer + type. The type of <code class="computeroutput"><span class="identifier">a</span></code> + shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. The default version + of this function calls <code class="computeroutput"><span class="identifier">eval_lcm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_powm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">cb2</span><span class="special">,</span> + <span class="identifier">cb3</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Sets <code class="computeroutput"><span class="identifier">b</span></code> to the result + of <span class="emphasis"><em>(cb^cb2)%cb3</em></span>. The default version of this + function is synthesised from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_powm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">cb2</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Sets <code class="computeroutput"><span class="identifier">b</span></code> to the result + of <span class="emphasis"><em>(cb^cb2)%a</em></span>. The type of <code class="computeroutput"><span class="identifier">a</span></code> + shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>. The default version + of this function is synthesised from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_powm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">,</span> + <span class="identifier">cb2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Sets <code class="computeroutput"><span class="identifier">b</span></code> to the result + of <span class="emphasis"><em>(cb^a)%cb2</em></span>. The type of <code class="computeroutput"><span class="identifier">a</span></code> + shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>. The default version + of this function is synthesised from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_powm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">,</span> + <span class="identifier">a2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Sets <code class="computeroutput"><span class="identifier">b</span></code> to the result + of <span class="emphasis"><em>(cb^a)%a2</em></span>. The type of <code class="computeroutput"><span class="identifier">a</span></code> + shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>. The default version + of this function is synthesised from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_integer_sqrt</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">b2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Sets <code class="computeroutput"><span class="identifier">b</span></code> to the largest + integer which when squared is less than <code class="computeroutput"><span class="identifier">cb</span></code>, + also sets <code class="computeroutput"><span class="identifier">b2</span></code> to + the remainder, ie to <span class="emphasis"><em>cb - b<sup>2</sup></em></span>. The default + version of this function is synthesised from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <span class="emphasis"><em>Sign manipulation:</em></span> + </p> + </td> +<td class="auto-generated"> </td> +<td class="auto-generated"> </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_abs</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Set <code class="computeroutput"><span class="identifier">b</span></code> to the absolute + value of <code class="computeroutput"><span class="identifier">cb</span></code>. The + default version of this functions assigns <code class="computeroutput"><span class="identifier">cb</span></code> + to <code class="computeroutput"><span class="identifier">b</span></code>, and then + calls <code class="computeroutput"><span class="identifier">b</span><span class="special">.</span><span class="identifier">negate</span><span class="special">()</span></code> + if <code class="computeroutput"><span class="identifier">eval_get_sign</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span> <span class="special"><</span> + <span class="number">0</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_fabs</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Set <code class="computeroutput"><span class="identifier">b</span></code> to the absolute + value of <code class="computeroutput"><span class="identifier">cb</span></code>. The + default version of this functions assigns <code class="computeroutput"><span class="identifier">cb</span></code> + to <code class="computeroutput"><span class="identifier">b</span></code>, and then + calls <code class="computeroutput"><span class="identifier">b</span><span class="special">.</span><span class="identifier">negate</span><span class="special">()</span></code> + if <code class="computeroutput"><span class="identifier">eval_get_sign</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span> <span class="special"><</span> + <span class="number">0</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <span class="emphasis"><em>Floating point functions:</em></span> + </p> + </td> +<td class="auto-generated"> </td> +<td class="auto-generated"> </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_fpclassify</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">int</span></code> + </p> + </td> +<td> + <p> + Returns one of the same values returned by <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">fpclassify</span></code>. + Only required when <code class="computeroutput"><span class="identifier">B</span></code> + is an floating-point type. The default version of this function + will only test for zero <code class="computeroutput"><span class="identifier">cb</span></code>. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_trunc</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">trunc</span></code> + on argument <code class="computeroutput"><span class="identifier">cb</span></code> + and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>. + Only required when <code class="computeroutput"><span class="identifier">B</span></code> + is an floating-point type. The default version of this function + is synthesised from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_round</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">round</span></code> + on argument <code class="computeroutput"><span class="identifier">cb</span></code> + and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>. + Only required when <code class="computeroutput"><span class="identifier">B</span></code> + is an floating-point type. The default version of this function + is synthesised from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_exp</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">exp</span></code> + on argument <code class="computeroutput"><span class="identifier">cb</span></code> + and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>. + Only required when <code class="computeroutput"><span class="identifier">B</span></code> + is an floating-point type. The default version of this function + is synthesised from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_log</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">log</span></code> + on argument <code class="computeroutput"><span class="identifier">cb</span></code> + and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>. + Only required when <code class="computeroutput"><span class="identifier">B</span></code> + is an floating-point type. The default version of this function + is synthesised from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_log10</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">log10</span></code> + on argument <code class="computeroutput"><span class="identifier">cb</span></code> + and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>. + Only required when <code class="computeroutput"><span class="identifier">B</span></code> + is an floating-point type. The default version of this function + is synthesised from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_sin</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">sin</span></code> + on argument <code class="computeroutput"><span class="identifier">cb</span></code> + and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>. + Only required when <code class="computeroutput"><span class="identifier">B</span></code> + is an floating-point type. The default version of this function + is synthesised from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_cos</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cos</span></code> + on argument <code class="computeroutput"><span class="identifier">cb</span></code> + and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>. + Only required when <code class="computeroutput"><span class="identifier">B</span></code> + is an floating-point type. The default version of this function + is synthesised from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_tan</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">exp</span></code> + on argument <code class="computeroutput"><span class="identifier">cb</span></code> + and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>. + Only required when <code class="computeroutput"><span class="identifier">B</span></code> + is an floating-point type. The default version of this function + is synthesised from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_asin</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">asin</span></code> + on argument <code class="computeroutput"><span class="identifier">cb</span></code> + and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>. + Only required when <code class="computeroutput"><span class="identifier">B</span></code> + is an floating-point type. The default version of this function + is synthesised from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_acos</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">acos</span></code> + on argument <code class="computeroutput"><span class="identifier">cb</span></code> + and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>. + Only required when <code class="computeroutput"><span class="identifier">B</span></code> + is an floating-point type. The default version of this function + is synthesised from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_atan</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">atan</span></code> + on argument <code class="computeroutput"><span class="identifier">cb</span></code> + and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>. + Only required when <code class="computeroutput"><span class="identifier">B</span></code> + is an floating-point type. The default version of this function + is synthesised from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_sinh</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">sinh</span></code> + on argument <code class="computeroutput"><span class="identifier">cb</span></code> + and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>. + Only required when <code class="computeroutput"><span class="identifier">B</span></code> + is an floating-point type. The default version of this function + is synthesised from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_cosh</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cosh</span></code> + on argument <code class="computeroutput"><span class="identifier">cb</span></code> + and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>. + Only required when <code class="computeroutput"><span class="identifier">B</span></code> + is an floating-point type. The default version of this function + is synthesised from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_tanh</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">tanh</span></code> + on argument <code class="computeroutput"><span class="identifier">cb</span></code> + and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>. + Only required when <code class="computeroutput"><span class="identifier">B</span></code> + is an floating-point type. The default version of this function + is synthesised from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_fmod</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">cb2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">fmod</span></code> + on arguments <code class="computeroutput"><span class="identifier">cb</span></code> + and <code class="computeroutput"><span class="identifier">cb2</span></code>, and store + the result in <code class="computeroutput"><span class="identifier">b</span></code>. + Only required when <code class="computeroutput"><span class="identifier">B</span></code> + is an floating-point type. The default version of this function + is synthesised from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_pow</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">cb2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pow</span></code> + on arguments <code class="computeroutput"><span class="identifier">cb</span></code> + and <code class="computeroutput"><span class="identifier">cb2</span></code>, and store + the result in <code class="computeroutput"><span class="identifier">b</span></code>. + Only required when <code class="computeroutput"><span class="identifier">B</span></code> + is an floating-point type. The default version of this function + is synthesised from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_atan2</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">cb2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">atan</span></code> + on arguments <code class="computeroutput"><span class="identifier">cb</span></code> + and <code class="computeroutput"><span class="identifier">cb2</span></code>, and store + the result in <code class="computeroutput"><span class="identifier">b</span></code>. + Only required when <code class="computeroutput"><span class="identifier">B</span></code> + is an floating-point type. The default version of this function + is synthesised from other operations above. + </p> + </td> +<td> + <p> +   + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_scalbn</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">,</span> + <span class="identifier">e</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + Scales value <code class="computeroutput"><span class="identifier">cb</span></code> + by <span class="emphasis"><em>r<sup>e</sup></em></span>, where <span class="emphasis"><em>r</em></span> is the + radix of the type. The default version of this function is implemented + in terms of eval_ldexp, consequently this function must be provided + for types with a radix other than 2. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_ilogb</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">exponent_type</span></code> + </p> + </td> +<td> + <p> + Returns the exponent <span class="emphasis"><em>e</em></span> of value <code class="computeroutput"><span class="identifier">cb</span></code> such that <span class="emphasis"><em>1 <= + cb*r<sup>-e</sup> < r</em></span>, where <span class="emphasis"><em>r</em></span> is the radix + of type B. The default version of this function is implemented + in terms of eval_frexp, consequently this function must be provided + for types with a radix other than 2. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eval_logb</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> + <span class="identifier">cb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">exponent_type</span></code> + </p> + </td> +<td> + <p> + Sets <code class="computeroutput"><span class="identifier">b</span></code> to the exponent + <span class="emphasis"><em>e</em></span> of value <code class="computeroutput"><span class="identifier">cb</span></code> + such that <span class="emphasis"><em>1 <= cb*r<sup>-b</sup> < r</em></span>, where <span class="emphasis"><em>r</em></span> + is the radix of type B. The default version of this function is + implemented in terms of <code class="computeroutput"><span class="identifier">eval_ilogb</span></code>. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><p> + When the tables above place no <span class="emphasis"><em>throws</em></span> requirements on + an operation, then it is up to each type modelling this concept to decide + when or whether throwing an exception is desirable. However, thrown exceptions + should always either be the type, or inherit from the type <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code>. + For example, a floating point type might choose to throw <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> + whenever the result of an operation would be infinite, and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">underflow_error</span></code> + whenever it would round to zero. + </p> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The non-member functions are all named with an "eval_" prefix + to avoid conflicts with template classes of the same name - in point of + fact this naming convention shouldn't be necessary, but rather works around + some compiler bugs. + </p></td></tr> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="internals.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.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="headers.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_bin_float_ref.html b/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_bin_float_ref.html new file mode 100644 index 0000000000..315c32ec7f --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_bin_float_ref.html @@ -0,0 +1,186 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>cpp_bin_float</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="mpfr_ref.html" title="mpfr_float_backend"> +<link rel="next" href="cpp_dec_ref.html" title="cpp_dec_float"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="mpfr_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.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="cpp_dec_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.ref.cpp_bin_float_ref"></a><a class="link" href="cpp_bin_float_ref.html" title="cpp_bin_float">cpp_bin_float</a> +</h3></div></div></div> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">enum</span> <span class="identifier">digit_base_type</span> +<span class="special">{</span> + <span class="identifier">digit_base_2</span> <span class="special">=</span> <span class="number">2</span><span class="special">,</span> + <span class="identifier">digit_base_10</span> <span class="special">=</span> <span class="number">10</span> +<span class="special">};</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">Digits</span><span class="special">,</span> <span class="identifier">digit_base_type</span> <span class="identifier">base</span> <span class="special">=</span> <span class="identifier">digit_base_10</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Exponent</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">,</span> <span class="identifier">ExponentMin</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> <span class="identifier">ExponentMax</span> <span class="special">=</span> <span class="number">0</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">cpp_bin_float</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_bin_float</span><span class="special"><</span><span class="number">50</span><span class="special">></span> <span class="special">></span> <span class="identifier">cpp_bin_float_50</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_bin_float</span><span class="special"><</span><span class="number">100</span><span class="special">></span> <span class="special">></span> <span class="identifier">cpp_bin_float_100</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">backends</span><span class="special">::</span><span class="identifier">cpp_bin_float</span><span class="special"><</span><span class="number">24</span><span class="special">,</span> <span class="identifier">backends</span><span class="special">::</span><span class="identifier">digit_base_2</span><span class="special">,</span> <span class="keyword">void</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">int16_t</span><span class="special">,</span> <span class="special">-</span><span class="number">126</span><span class="special">,</span> <span class="number">127</span><span class="special">>,</span> <span class="identifier">et_off</span><span class="special">></span> <span class="identifier">cpp_bin_float_single</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">backends</span><span class="special">::</span><span class="identifier">cpp_bin_float</span><span class="special"><</span><span class="number">53</span><span class="special">,</span> <span class="identifier">backends</span><span class="special">::</span><span class="identifier">digit_base_2</span><span class="special">,</span> <span class="keyword">void</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">int16_t</span><span class="special">,</span> <span class="special">-</span><span class="number">1022</span><span class="special">,</span> <span class="number">1023</span><span class="special">>,</span> <span class="identifier">et_off</span><span class="special">></span> <span class="identifier">cpp_bin_float_double</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">backends</span><span class="special">::</span><span class="identifier">cpp_bin_float</span><span class="special"><</span><span class="number">64</span><span class="special">,</span> <span class="identifier">backends</span><span class="special">::</span><span class="identifier">digit_base_2</span><span class="special">,</span> <span class="keyword">void</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">int16_t</span><span class="special">,</span> <span class="special">-</span><span class="number">16382</span><span class="special">,</span> <span class="number">16383</span><span class="special">>,</span> <span class="identifier">et_off</span><span class="special">></span> <span class="identifier">cpp_bin_float_double_extended</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">backends</span><span class="special">::</span><span class="identifier">cpp_bin_float</span><span class="special"><</span><span class="number">113</span><span class="special">,</span> <span class="identifier">backends</span><span class="special">::</span><span class="identifier">digit_base_2</span><span class="special">,</span> <span class="keyword">void</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">int16_t</span><span class="special">,</span> <span class="special">-</span><span class="number">16382</span><span class="special">,</span> <span class="number">16383</span><span class="special">>,</span> <span class="identifier">et_off</span><span class="special">></span> <span class="identifier">cpp_bin_float_quad</span><span class="special">;</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> +</pre> +<p> + Class template <code class="computeroutput"><span class="identifier">cpp_bin_float</span></code> + fulfils all of the requirements for a <a class="link" href="backendconc.html" title="Backend Requirements">Backend</a> + type. Its members and non-member functions are deliberately not documented: + these are considered implementation details that are subject to change. + </p> +<p> + The class takes six template parameters: + </p> +<div class="variablelist"> +<p class="title"><b></b></p> +<dl class="variablelist"> +<dt><span class="term">Digits</span></dt> +<dd><p> + The number of digits precision the type should support. This is normally + expressed as base-10 digits, but that can be changed via the second + template parameter. + </p></dd> +<dt><span class="term">base</span></dt> +<dd><p> + An enumerated value (either <code class="computeroutput"><span class="identifier">digit_base_10</span></code> + or <code class="computeroutput"><span class="identifier">digit_base_2</span></code>) that + indicates whether <code class="computeroutput"><span class="identifier">Digits</span></code> + is base-10 or base-2 + </p></dd> +<dt><span class="term">Allocator</span></dt> +<dd><p> + The allocator used: defaults to type <code class="computeroutput"><span class="keyword">void</span></code>, + meaning all storage is within the class, and no dynamic allocation + is performed, but can be set to a standard library allocator if dynamic + allocation makes more sense. + </p></dd> +<dt><span class="term">Exponent</span></dt> +<dd><p> + A signed integer type to use as the type of the exponent - defaults + to <code class="computeroutput"><span class="keyword">int</span></code>. + </p></dd> +<dt><span class="term">ExponentMin</span></dt> +<dd><p> + The smallest (most negative) permitted exponent, defaults to zero, + meaning "define as small as possible given the limitations of + the type and our internal requirements". + </p></dd> +<dt><span class="term">ExponentMax</span></dt> +<dd><p> + The largest (most positive) permitted exponent, defaults to zero, meaning + "define as large as possible given the limitations of the type + and our internal requirements". + </p></dd> +</dl> +</div> +<p> + The type of <code class="computeroutput"><span class="identifier">number_category</span><span class="special"><</span><span class="identifier">cpp_bin_float</span><span class="special"><</span><span class="identifier">Args</span><span class="special">...></span> <span class="special">>::</span><span class="identifier">type</span></code> is <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special"><</span><span class="identifier">number_kind_floating_point</span><span class="special">></span></code>. + </p> +<p> + More information on this type can be found in the <a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float">tutorial</a>. + </p> +<h5> +<a name="boost_multiprecision.ref.cpp_bin_float_ref.h0"></a> + <span class="phrase"><a name="boost_multiprecision.ref.cpp_bin_float_ref.implementation_notes"></a></span><a class="link" href="cpp_bin_float_ref.html#boost_multiprecision.ref.cpp_bin_float_ref.implementation_notes">Implementation + Notes</a> + </h5> +<p> + Internally, an N-bit <code class="computeroutput"><span class="identifier">cpp_bin_float</span></code> + is represented as an N-bit unsigned integer along with an exponent and a + sign. The integer part is normalized so that it's most significant bit is + always 1. The decimal point is assumed to be directly after the most significant + bit of the integer part. The special values zero, infinity and NaN all have + the integer part set to zero, and the exponent to one of 3 special values + above the maximum permitted exponent. + </p> +<p> + Multiplication is trivial: multiply the two N-bit integer mantissa's to obtain + a 2N-bit number, then round and adjust the sign and exponent. + </p> +<p> + Addition and subtraction proceed similarly - if the exponents are such that + there is overlap between the two values, then left shift the larger value + to produce a number with between N and 2N bits, then perform integer addition + or subtraction, round, and adjust the exponent. + </p> +<p> + Division proceeds as follows: first scale the numerator by some power of + 2 so that integer division will produce either an N-bit or N+1 bit result + plus a remainder. If we get an N bit result then the size of twice the remainder + compared to the denominator gives us the rounding direction. Otherwise we + have one extra bit in the result which we can use to determine rounding (in + this case ties occur only if the remainder is zero and the extra bit is a + 1). + </p> +<p> + Square root uses integer square root in a manner analogous to division. + </p> +<p> + Decimal string to binary conversion proceeds as follows: first parse the + digits to produce an integer multiplied by a decimal exponent. Note that + we stop parsing digits once we have parsed as many as can possibly effect + the result - this stops the integer part growing too large when there are + a very large number of input digits provided. At this stage if the decimal + exponent is positive then the result is an integer and we can in principle + simply multiply by 10^N to get an exact integer result. In practice however, + that could produce some very large integers. We also need to be able to divide + by 10^N in the event that the exponent is negative. Therefore calculation + of the 10^N values plus the multiplication or division are performed using + limited precision integer arithmetic, plus an exponent, and a track of the + accumulated error. At the end of the calculation we will either be able to + round unambiguously, or the error will be such that we can't tell which way + to round. In the latter case we simply up the precision and try again until + we have an unambiguously rounded result. + </p> +<p> + Binary to decimal conversion proceeds very similarly to the above, our aim + is to calculate <code class="computeroutput"><span class="identifier">mantissa</span> <span class="special">*</span> <span class="number">2</span><span class="special">^</span><span class="identifier">shift</span> <span class="special">*</span> <span class="number">10</span><span class="special">^</span><span class="identifier">E</span></code> + where <code class="computeroutput"><span class="identifier">E</span></code> is the decimal exponent + and <code class="computeroutput"><span class="identifier">shift</span></code> is calculated so + that the result is an N bit integer assuming we want N digits printed in + the result. As before we use limited precision arithmetic to calculate the + result and up the precision as necessary until the result is unambiguously + correctly rounded. In addition our initial calculation of the decimal exponent + may be out by 1, so we have to correct that and loop as well in the that + case. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="mpfr_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.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="cpp_dec_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_dec_ref.html b/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_dec_ref.html new file mode 100644 index 0000000000..f786543b92 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_dec_ref.html @@ -0,0 +1,92 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>cpp_dec_float</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="cpp_bin_float_ref.html" title="cpp_bin_float"> +<link rel="next" href="internals.html" title="Internal Support Code"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="cpp_bin_float_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.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="internals.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.ref.cpp_dec_ref"></a><a class="link" href="cpp_dec_ref.html" title="cpp_dec_float">cpp_dec_float</a> +</h3></div></div></div> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExponentType</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">int32_t</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">cpp_dec_float</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_dec_float</span><span class="special"><</span><span class="number">50</span><span class="special">></span> <span class="special">></span> <span class="identifier">cpp_dec_float_50</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_dec_float</span><span class="special"><</span><span class="number">100</span><span class="special">></span> <span class="special">></span> <span class="identifier">cpp_dec_float_100</span><span class="special">;</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> +</pre> +<p> + Class template <code class="computeroutput"><span class="identifier">cpp_dec_float</span></code> + fulfils all of the requirements for a <a class="link" href="backendconc.html" title="Backend Requirements">Backend</a> + type. Its members and non-member functions are deliberately not documented: + these are considered implementation details that are subject to change. + </p> +<p> + The class takes three template parameters: + </p> +<div class="variablelist"> +<p class="title"><b></b></p> +<dl class="variablelist"> +<dt><span class="term">Digits10</span></dt> +<dd><p> + The number of decimal digits precision the type should support. Note + that this type does not normally perform any dynamic memory allocation, + and as a result the <code class="computeroutput"><span class="identifier">Digits10</span></code> + template argument should not be set too high or the class's size will + grow unreasonably large. + </p></dd> +<dt><span class="term">ExponentType</span></dt> +<dd><p> + A signed integer type that represents the exponent of the number + </p></dd> +<dt><span class="term">Allocator</span></dt> +<dd><p> + The allocator used: defaults to type <code class="computeroutput"><span class="keyword">void</span></code>, + meaning all storage is within the class, and no dynamic allocation + is performed, but can be set to a standard library allocator if dynamic + allocation makes more sense. + </p></dd> +</dl> +</div> +<p> + The type of <code class="computeroutput"><span class="identifier">number_category</span><span class="special"><</span><span class="identifier">cpp_dec_float</span><span class="special"><</span><span class="identifier">Args</span><span class="special">...></span> <span class="special">>::</span><span class="identifier">type</span></code> is <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special"><</span><span class="identifier">number_kind_floating_point</span><span class="special">></span></code>. + </p> +<p> + More information on this type can be found in the <a class="link" href="../tut/floats/cpp_dec_float.html" title="cpp_dec_float">tutorial</a>. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="cpp_bin_float_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.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="internals.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_int_ref.html b/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_int_ref.html new file mode 100644 index 0000000000..c16b92223b --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_int_ref.html @@ -0,0 +1,157 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>cpp_int</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="number.html" title="number"> +<link rel="next" href="gmp_int_ref.html" title="gmp_int"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="number.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.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="gmp_int_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.ref.cpp_int_ref"></a><a class="link" href="cpp_int_ref.html" title="cpp_int">cpp_int</a> +</h3></div></div></div> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">typedef</span> <span class="identifier">unspecified</span><span class="special">-</span><span class="identifier">type</span> <span class="identifier">limb_type</span><span class="special">;</span> + +<span class="keyword">enum</span> <span class="identifier">cpp_integer_type</span> <span class="special">{</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span> <span class="special">};</span> +<span class="keyword">enum</span> <span class="identifier">cpp_int_check_type</span> <span class="special">{</span> <span class="identifier">checked</span><span class="special">,</span> <span class="identifier">unchecked</span> <span class="special">};</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">MinDigits</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> + <span class="keyword">unsigned</span> <span class="identifier">MaxDits</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> + <span class="identifier">cpp_integer_type</span> <span class="identifier">SignType</span> <span class="special">=</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> + <span class="identifier">cpp_int_check_type</span> <span class="identifier">Checked</span> <span class="special">=</span> <span class="identifier">unchecked</span><span class="special">,</span> + <span class="keyword">class</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special"><</span><span class="identifier">limb_type</span><span class="special">></span> <span class="special">></span> +<span class="keyword">class</span> <span class="identifier">cpp_int_backend</span><span class="special">;</span> +<span class="comment">//</span> +<span class="comment">// Expression templates default to et_off if there is no allocator:</span> +<span class="comment">//</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">MinDigits</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">MaxDigits</span><span class="special">,</span> <span class="identifier">cpp_integer_type</span> <span class="identifier">SignType</span><span class="special">,</span> <span class="identifier">cpp_int_check_type</span> <span class="identifier">Checked</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">expression_template_default</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="identifier">MinDigits</span><span class="special">,</span> <span class="identifier">MaxDigits</span><span class="special">,</span> <span class="identifier">SignType</span><span class="special">,</span> <span class="identifier">Checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> +<span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">expression_template_option</span> <span class="identifier">value</span> <span class="special">=</span> <span class="identifier">et_off</span><span class="special">;</span> <span class="special">};</span> + +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><></span> <span class="special">></span> <span class="identifier">cpp_int</span><span class="special">;</span> <span class="comment">// arbitrary precision integer</span> +<span class="keyword">typedef</span> <span class="identifier">rational_adaptor</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><></span> <span class="special">></span> <span class="identifier">cpp_rational_backend</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_rational_backend</span><span class="special">></span> <span class="identifier">cpp_rational</span><span class="special">;</span> <span class="comment">// arbitrary precision rational number</span> + +<span class="comment">// Fixed precision unsigned types:</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">128</span><span class="special">,</span> <span class="number">128</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">uint128_t</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">256</span><span class="special">,</span> <span class="number">256</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">uint256_t</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">512</span><span class="special">,</span> <span class="number">512</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">uint512_t</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">1024</span><span class="special">,</span> <span class="number">1024</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">uint1024_t</span><span class="special">;</span> + +<span class="comment">// Fixed precision signed types:</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">128</span><span class="special">,</span> <span class="number">128</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">int128_t</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">256</span><span class="special">,</span> <span class="number">256</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">int256_t</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">512</span><span class="special">,</span> <span class="number">512</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">int512_t</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">1024</span><span class="special">,</span> <span class="number">1024</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">int1024_t</span><span class="special">;</span> + +<span class="comment">// Over again, but with checking enabled this time:</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">0</span><span class="special">,</span> <span class="number">0</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">></span> <span class="special">></span> <span class="identifier">checked_cpp_int</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">rational_adaptor</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">0</span><span class="special">,</span> <span class="number">0</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">></span> <span class="special">></span> <span class="identifier">checked_cpp_rational_backend</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_rational_backend</span><span class="special">></span> <span class="identifier">checked_cpp_rational</span><span class="special">;</span> + +<span class="comment">// Checked fixed precision unsigned types:</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">128</span><span class="special">,</span> <span class="number">128</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">checked_uint128_t</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">256</span><span class="special">,</span> <span class="number">256</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">checked_uint256_t</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">512</span><span class="special">,</span> <span class="number">512</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">checked_uint512_t</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">1024</span><span class="special">,</span> <span class="number">1024</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">checked_uint1024_t</span><span class="special">;</span> + +<span class="comment">// Fixed precision signed types:</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">128</span><span class="special">,</span> <span class="number">128</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">checked_int128_t</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">256</span><span class="special">,</span> <span class="number">256</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">checked_int256_t</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">512</span><span class="special">,</span> <span class="number">512</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">checked_int512_t</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">1024</span><span class="special">,</span> <span class="number">1024</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">checked_int1024_t</span><span class="special">;</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> +</pre> +<p> + Class template <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code> + fulfils all of the requirements for a <a class="link" href="backendconc.html" title="Backend Requirements">Backend</a> + type. Its members and non-member functions are deliberately not documented: + these are considered implementation details that are subject to change. + </p> +<p> + The template arguments are: + </p> +<div class="variablelist"> +<p class="title"><b></b></p> +<dl class="variablelist"> +<dt><span class="term">MinBits</span></dt> +<dd><p> + Determines the number of Bits to store directly within the object before + resorting to dynamic memory allocation. When zero, this field is determined + automatically based on how many bits can be stored in union with the + dynamic storage header: setting a larger value may improve performance + as larger integer values will be stored internally before memory allocation + is required. + </p></dd> +<dt><span class="term">MaxBits</span></dt> +<dd><p> + Determines the maximum number of bits to be stored in the type: resulting + in a fixed precision type. When this value is the same as MinBits, + then the Allocator parameter is ignored, as no dynamic memory allocation + will ever be performed: in this situation the Allocator parameter should + be set to type <code class="computeroutput"><span class="keyword">void</span></code>. Note + that this parameter should not be used simply to prevent large memory + allocations, not only is that role better performed by the allocator, + but fixed precision integers have a tendency to allocate all of MaxBits + of storage more often than one would expect. + </p></dd> +<dt><span class="term">SignType</span></dt> +<dd><p> + Determines whether the resulting type is signed or not. Note that for + <a href="http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic" target="_top">arbitrary + precision</a> types this parameter must be <code class="computeroutput"><span class="identifier">signed_magnitude</span></code>. + For fixed precision types then this type may be either <code class="computeroutput"><span class="identifier">signed_magnitude</span></code> or <code class="computeroutput"><span class="identifier">unsigned_magnitude</span></code>. + </p></dd> +<dt><span class="term">Checked</span></dt> +<dd><p> + This parameter has two values: <code class="computeroutput"><span class="identifier">checked</span></code> + or <code class="computeroutput"><span class="identifier">unchecked</span></code>. See the + <a class="link" href="../tut/ints/cpp_int.html" title="cpp_int">tutorial</a> + for more information. + </p></dd> +<dt><span class="term">Allocator</span></dt> +<dd><p> + The allocator to use for dynamic memory allocation, or type <code class="computeroutput"><span class="keyword">void</span></code> if MaxBits == MinBits. + </p></dd> +</dl> +</div> +<p> + The type of <code class="computeroutput"><span class="identifier">number_category</span><span class="special"><</span><span class="identifier">cpp_int</span><span class="special"><</span><span class="identifier">Args</span><span class="special">...></span> <span class="special">>::</span><span class="identifier">type</span></code> is <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special"><</span><span class="identifier">number_kind_integer</span><span class="special">></span></code>. + </p> +<p> + More information on this type can be found in the <a class="link" href="../tut/ints/cpp_int.html" title="cpp_int">tutorial</a>. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="number.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.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="gmp_int_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/ref/gmp_int_ref.html b/libs/multiprecision/doc/html/boost_multiprecision/ref/gmp_int_ref.html new file mode 100644 index 0000000000..adb1ecea4e --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/ref/gmp_int_ref.html @@ -0,0 +1,63 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>gmp_int</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="cpp_int_ref.html" title="cpp_int"> +<link rel="next" href="tom_int_ref.html" title="tom_int"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="cpp_int_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.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="tom_int_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.ref.gmp_int_ref"></a><a class="link" href="gmp_int_ref.html" title="gmp_int">gmp_int</a> +</h3></div></div></div> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">class</span> <span class="identifier">gmp_int</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">gmp_int</span> <span class="special">></span> <span class="identifier">mpz_int</span><span class="special">;</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> +</pre> +<p> + Class template <code class="computeroutput"><span class="identifier">gmp_int</span></code> fulfils + all of the requirements for a <a class="link" href="backendconc.html" title="Backend Requirements">Backend</a> + type. Its members and non-member functions are deliberately not documented: + these are considered implementation details that are subject to change. + </p> +<p> + The type of <code class="computeroutput"><span class="identifier">number_category</span><span class="special"><</span><span class="identifier">cpp_int</span><span class="special"><</span><span class="identifier">Args</span><span class="special">...></span> <span class="special">>::</span><span class="identifier">type</span></code> is <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special"><</span><span class="identifier">number_kind_integer</span><span class="special">></span></code>. + </p> +<p> + More information on this type can be found in the <a class="link" href="../tut/ints/gmp_int.html" title="gmp_int">tutorial</a>. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="cpp_int_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.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="tom_int_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/ref/headers.html b/libs/multiprecision/doc/html/boost_multiprecision/ref/headers.html new file mode 100644 index 0000000000..d8ff404fe3 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/ref/headers.html @@ -0,0 +1,424 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Header File Structure</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="backendconc.html" title="Backend Requirements"> +<link rel="next" href="../perf.html" title="Performance Comparison"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="backendconc.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.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="../perf.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.ref.headers"></a><a class="link" href="headers.html" title="Header File Structure">Header File Structure</a> +</h3></div></div></div> +<div class="table"> +<a name="boost_multiprecision.ref.headers.top_level_headers"></a><p class="title"><b>Table 1.10. Top level headers</b></p> +<div class="table-contents"><table class="table" summary="Top level headers"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Header + </p> + </th> +<th> + <p> + Contains + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int.hpp + </p> + </td> +<td> + <p> + The <code class="computeroutput"><span class="identifier">cpp_int</span></code> backend + type. + </p> + </td> +</tr> +<tr> +<td> + <p> + gmp.hpp + </p> + </td> +<td> + <p> + Defines all <a href="http://gmplib.org" target="_top">GMP</a> related + backends. + </p> + </td> +</tr> +<tr> +<td> + <p> + miller_rabin.hpp + </p> + </td> +<td> + <p> + Miller Rabin primality testing code. + </p> + </td> +</tr> +<tr> +<td> + <p> + number.hpp + </p> + </td> +<td> + <p> + Defines the <code class="computeroutput"><span class="identifier">number</span></code> + backend, is included by all the backend headers. + </p> + </td> +</tr> +<tr> +<td> + <p> + mpfr.hpp + </p> + </td> +<td> + <p> + Defines the mpfr_float_backend backend. + </p> + </td> +</tr> +<tr> +<td> + <p> + random.hpp + </p> + </td> +<td> + <p> + Defines code to interoperate with Boost.Random. + </p> + </td> +</tr> +<tr> +<td> + <p> + rational_adaptor.hpp + </p> + </td> +<td> + <p> + Defines the <code class="computeroutput"><span class="identifier">rational_adaptor</span></code> + backend. + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_dec_float.hpp + </p> + </td> +<td> + <p> + Defines the <code class="computeroutput"><span class="identifier">cpp_dec_float</span></code> + backend. + </p> + </td> +</tr> +<tr> +<td> + <p> + tommath.hpp + </p> + </td> +<td> + <p> + Defines the <code class="computeroutput"><span class="identifier">tommath_int</span></code> + backend. + </p> + </td> +</tr> +<tr> +<td> + <p> + concepts/number_archetypes.hpp + </p> + </td> +<td> + <p> + Defines a backend concept archetypes for testing use. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.ref.headers.implementation_headers"></a><p class="title"><b>Table 1.11. Implementation Headers</b></p> +<div class="table-contents"><table class="table" summary="Implementation Headers"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Header + </p> + </th> +<th> + <p> + Contains + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + cpp_int/add.hpp + </p> + </td> +<td> + <p> + Add and subtract operators for <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int/bitwise.hpp + </p> + </td> +<td> + <p> + Bitwise operators for <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int/checked.hpp + </p> + </td> +<td> + <p> + Helper functions for checked arithmetic for <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int/comparison.hpp + </p> + </td> +<td> + <p> + Comparison operators for <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int/cpp_int_config.hpp + </p> + </td> +<td> + <p> + Basic setup and configuration for <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int/divide.hpp + </p> + </td> +<td> + <p> + Division and modulus operators for <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int/limits.hpp + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">numeric_limits</span></code> + support for <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int/misc.hpp + </p> + </td> +<td> + <p> + Miscellaneous operators for <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int/multiply.hpp + </p> + </td> +<td> + <p> + Multiply operators for <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + detail/big_lanczos.hpp + </p> + </td> +<td> + <p> + Lanczos support for Boost.Math integration. + </p> + </td> +</tr> +<tr> +<td> + <p> + detail/default_ops.hpp + </p> + </td> +<td> + <p> + Default versions of the optional backend non-member functions. + </p> + </td> +</tr> +<tr> +<td> + <p> + detail/generic_interconvert.hpp + </p> + </td> +<td> + <p> + Generic interconversion routines. + </p> + </td> +</tr> +<tr> +<td> + <p> + detail/number_base.hpp + </p> + </td> +<td> + <p> + All the expression template code, metaprogramming, and operator + overloads for <code class="computeroutput"><span class="identifier">number</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + detail/no_et_ops.hpp + </p> + </td> +<td> + <p> + The non-expression template operators. + </p> + </td> +</tr> +<tr> +<td> + <p> + detail/functions/constants.hpp + </p> + </td> +<td> + <p> + Defines constants used by the floating point functions. + </p> + </td> +</tr> +<tr> +<td> + <p> + detail/functions/pow.hpp + </p> + </td> +<td> + <p> + Defines default versions of the power and exponential related floating + point functions. + </p> + </td> +</tr> +<tr> +<td> + <p> + detail/functions/trig.hpp + </p> + </td> +<td> + <p> + Defines default versions of the trigonometric related floating + point functions. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="backendconc.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.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="../perf.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/ref/internals.html b/libs/multiprecision/doc/html/boost_multiprecision/ref/internals.html new file mode 100644 index 0000000000..02a514eade --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/ref/internals.html @@ -0,0 +1,114 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Internal Support Code</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="cpp_dec_ref.html" title="cpp_dec_float"> +<link rel="next" href="backendconc.html" title="Backend Requirements"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="cpp_dec_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.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="backendconc.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.ref.internals"></a><a class="link" href="internals.html" title="Internal Support Code">Internal Support + Code</a> +</h3></div></div></div> +<p> + There are some traits classes which authors of new backends should be aware + of: + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">detail</span><span class="special">{</span> + +<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">From</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">To</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">is_explicitly_convertible</span><span class="special">;</span> + +<span class="special">}}}</span> +</pre> +<p> + Inherits from <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">bool</span><span class="special">,</span><span class="keyword">true</span><span class="special">></span></code> if type <code class="computeroutput"><span class="identifier">From</span></code> + has an explicit conversion from <code class="computeroutput"><span class="identifier">To</span></code>. + </p> +<p> + For compilers that support C++11 SFINAE-expressions this trait should "just + work". Otherwise it inherits from <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_convertible</span><span class="special"><</span><span class="identifier">From</span><span class="special">,</span> <span class="identifier">To</span><span class="special">>::</span><span class="identifier">type</span></code>, and will need to be specialised for + Backends that have constructors marked as <code class="computeroutput"><span class="keyword">explicit</span></code>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">From</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">To</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">is_lossy_conversion</span> +<span class="special">{</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">bool</span> <span class="identifier">value</span> <span class="special">=</span> <span class="identifier">see</span> <span class="identifier">below</span><span class="special">;</span> +<span class="special">};</span> +</pre> +<p> + Member <code class="computeroutput"><span class="identifier">value</span></code> is true if the + conversion from <code class="computeroutput"><span class="identifier">From</span></code> to + <code class="computeroutput"><span class="identifier">To</span></code> would result in a loss + of precision, and <code class="computeroutput"><span class="keyword">false</span></code> otherwise. + </p> +<p> + The default version of this trait simply checks whether the <span class="emphasis"><em>kind</em></span> + of conversion (for example from a floating point to an integer type) is inherently + lossy. Note that if either of the types <code class="computeroutput"><span class="identifier">From</span></code> + or <code class="computeroutput"><span class="identifier">To</span></code> are of an unknown number + category (because <code class="computeroutput"><span class="identifier">number_category</span></code> + is not specialised for that type) then this trait will be <code class="computeroutput"><span class="keyword">true</span></code>. + </p> +<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">From</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">To</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">is_restricted_conversion</span> +<span class="special">{</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">bool</span> <span class="identifier">value</span> <span class="special">=</span> <span class="identifier">see</span> <span class="identifier">below</span><span class="special">;</span> +<span class="special">};</span> +</pre> +<p> + Member <code class="computeroutput"><span class="identifier">value</span></code> is <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">From</span></code> + is only explicitly convertible to <code class="computeroutput"><span class="identifier">To</span></code> + and not implicitly convertible, or if <code class="computeroutput"><span class="identifier">is_lossy_conversion</span><span class="special"><</span><span class="identifier">From</span><span class="special">,</span> <span class="identifier">To</span><span class="special">>::</span><span class="identifier">value</span></code> is <code class="computeroutput"><span class="keyword">true</span></code>. + Otherwise <code class="computeroutput"><span class="keyword">false</span></code>. + </p> +<p> + Note that while this trait is the ultimate arbiter of which constructors + are marked as <code class="computeroutput"><span class="keyword">explicit</span></code> in class + <code class="computeroutput"><span class="identifier">number</span></code>, authors of backend + types should generally specialise one of the traits above, rather than this + one directly. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> +<span class="identifier">is_signed_number</span><span class="special">;</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> +<span class="identifier">is_unsigned_number</span><span class="special">;</span> +</pre> +<p> + These two traits inherit from either <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code> + or <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span></code>, by default types are assumed to + be signed unless <code class="computeroutput"><span class="identifier">is_unsigned_number</span></code> + is specialized for that type. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="cpp_dec_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.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="backendconc.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/ref/mpf_ref.html b/libs/multiprecision/doc/html/boost_multiprecision/ref/mpf_ref.html new file mode 100644 index 0000000000..cdfa14f097 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/ref/mpf_ref.html @@ -0,0 +1,79 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>gmp_float</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="tom_int_ref.html" title="tom_int"> +<link rel="next" href="mpfr_ref.html" title="mpfr_float_backend"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="tom_int_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.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="mpfr_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.ref.mpf_ref"></a><a class="link" href="mpf_ref.html" title="gmp_float">gmp_float</a> +</h3></div></div></div> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">gmp_float</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">gmp_float</span><span class="special"><</span><span class="number">50</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpf_float_50</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">gmp_float</span><span class="special"><</span><span class="number">100</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpf_float_100</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">gmp_float</span><span class="special"><</span><span class="number">500</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpf_float_500</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">gmp_float</span><span class="special"><</span><span class="number">1000</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpf_float_1000</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">gmp_float</span><span class="special"><</span><span class="number">0</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpf_float</span><span class="special">;</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> +</pre> +<p> + Class template <code class="computeroutput"><span class="identifier">gmp_float</span></code> + fulfils all of the requirements for a <a class="link" href="backendconc.html" title="Backend Requirements">Backend</a> + type. Its members and non-member functions are deliberately not documented: + these are considered implementation details that are subject to change. + </p> +<p> + The class takes a single template parameter - <code class="computeroutput"><span class="identifier">Digits10</span></code> + - which is the number of decimal digits precision the type should support. + When this parameter is zero, then the precision can be set at runtime via + <code class="computeroutput"><span class="identifier">number</span><span class="special">::</span><span class="identifier">default_precision</span></code> and <code class="computeroutput"><span class="identifier">number</span><span class="special">::</span><span class="identifier">precision</span></code>. + Note that this type does not in any way change the GMP library's global state + (for example it does not change the default precision of the mpf_t data type), + therefore you can safely mix this type with existing code that uses GMP, + and also mix <code class="computeroutput"><span class="identifier">gmp_float</span></code>s of + differing precision. + </p> +<p> + The type of <code class="computeroutput"><span class="identifier">number_category</span><span class="special"><</span><span class="identifier">cpp_int</span><span class="special"><</span><span class="identifier">Args</span><span class="special">...></span> <span class="special">>::</span><span class="identifier">type</span></code> is <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special"><</span><span class="identifier">number_kind_floating_point</span><span class="special">></span></code>. + </p> +<p> + More information on this type can be found in the <a class="link" href="../tut/floats/gmp_float.html" title="gmp_float">tutorial</a>. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="tom_int_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.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="mpfr_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/ref/mpfr_ref.html b/libs/multiprecision/doc/html/boost_multiprecision/ref/mpfr_ref.html new file mode 100644 index 0000000000..72ace3a62b --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/ref/mpfr_ref.html @@ -0,0 +1,79 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>mpfr_float_backend</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="mpf_ref.html" title="gmp_float"> +<link rel="next" href="cpp_bin_float_ref.html" title="cpp_bin_float"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="mpf_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.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="cpp_bin_float_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.ref.mpfr_ref"></a><a class="link" href="mpfr_ref.html" title="mpfr_float_backend">mpfr_float_backend</a> +</h3></div></div></div> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">mpfr_float_backend</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="number">50</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpfr_float_50</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="number">100</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpfr_float_100</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="number">500</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpfr_float_500</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="number">1000</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpfr_float_1000</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="number">0</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpfr_float</span><span class="special">;</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> +</pre> +<p> + Class template <code class="computeroutput"><span class="identifier">mpfr_float_backend</span></code> + fulfils all of the requirements for a <a class="link" href="backendconc.html" title="Backend Requirements">Backend</a> + type. Its members and non-member functions are deliberately not documented: + these are considered implementation details that are subject to change. + </p> +<p> + The class takes a single template parameter - <code class="computeroutput"><span class="identifier">Digits10</span></code> + - which is the number of decimal digits precision the type should support. + When this parameter is zero, then the precision can be set at runtime via + <code class="computeroutput"><span class="identifier">number</span><span class="special">::</span><span class="identifier">default_precision</span></code> and <code class="computeroutput"><span class="identifier">number</span><span class="special">::</span><span class="identifier">precision</span></code>. + Note that this type does not in any way change the GMP or MPFR library's + global state (for example it does not change the default precision of the + mpfr_t data type), therefore you can safely mix this type with existing code + that uses GMP or MPFR, and also mix <code class="computeroutput"><span class="identifier">mpfr_float_backend</span></code>s + of differing precision. + </p> +<p> + The type of <code class="computeroutput"><span class="identifier">number_category</span><span class="special"><</span><span class="identifier">cpp_int</span><span class="special"><</span><span class="identifier">Args</span><span class="special">...></span> <span class="special">>::</span><span class="identifier">type</span></code> is <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special"><</span><span class="identifier">number_kind_floating_point</span><span class="special">></span></code>. + </p> +<p> + More information on this type can be found in the <a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float">tutorial</a>. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="mpf_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.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="cpp_bin_float_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/ref/number.html b/libs/multiprecision/doc/html/boost_multiprecision/ref/number.html new file mode 100644 index 0000000000..b272c7d984 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/ref/number.html @@ -0,0 +1,1330 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>number</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="../ref.html" title="Reference"> +<link rel="next" href="cpp_int_ref.html" title="cpp_int"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.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="cpp_int_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.ref.number"></a><a class="link" href="number.html" title="number">number</a> +</h3></div></div></div> +<h5> +<a name="boost_multiprecision.ref.number.h0"></a> + <span class="phrase"><a name="boost_multiprecision.ref.number.synopsis"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.synopsis">Synopsis</a> + </h5> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">enum</span> <span class="identifier">expression_template_option</span> <span class="special">{</span> <span class="identifier">et_on</span> <span class="special">=</span> <span class="number">1</span><span class="special">,</span> <span class="identifier">et_off</span> <span class="special">=</span> <span class="number">0</span> <span class="special">};</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">expression_template_default</span> +<span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">expression_template_option</span> <span class="identifier">value</span> <span class="special">=</span> <span class="identifier">et_on</span><span class="special">;</span> <span class="special">};</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span> <span class="special">=</span> <span class="identifier">expression_template_default</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">>::</span><span class="identifier">value</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">number</span> +<span class="special">{</span> + <span class="identifier">number</span><span class="special">();</span> + <span class="identifier">number</span><span class="special">(</span><span class="identifier">see</span><span class="special">-</span><span class="identifier">below</span><span class="special">);</span> + <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">see</span><span class="special">-</span><span class="identifier">below</span><span class="special">);</span> + <span class="identifier">number</span><span class="special">&</span> <span class="identifier">assign</span><span class="special">(</span><span class="identifier">see</span><span class="special">-</span><span class="identifier">below</span><span class="special">);</span> + + <span class="comment">// Member operators</span> + <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">+=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> + <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">-=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> + <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">*=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> + <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">/=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> + <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++();</span> + <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">--();</span> + <span class="identifier">number</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span> + <span class="identifier">number</span> <span class="keyword">operator</span><span class="special">--(</span><span class="keyword">int</span><span class="special">);</span> + + <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">%=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> + <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">&=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> + <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">|=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> + <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">^=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> + <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special"><<=(</span><span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&);</span> + <span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">>>=(</span><span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&);</span> + + <span class="comment">// Use in Boolean context:</span> + <span class="keyword">operator</span> <span class="emphasis"><em>convertible-to-bool-type</em></span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> + <span class="comment">// swap:</span> + <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">number</span><span class="special">&</span> <span class="identifier">other</span><span class="special">);</span> + <span class="comment">// Sign:</span> + <span class="keyword">bool</span> <span class="identifier">is_zero</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> + <span class="keyword">int</span> <span class="identifier">sign</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> + <span class="comment">// string conversion:</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">str</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> + <span class="comment">// Generic conversion mechanism</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> + <span class="identifier">T</span> <span class="identifier">convert_to</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> + <span class="keyword">explicit</span> <span class="keyword">operator</span> <span class="identifier">T</span> <span class="special">()</span><span class="keyword">const</span><span class="special">;</span> + <span class="comment">// precision control:</span> + <span class="keyword">static</span> <span class="keyword">unsigned</span> <span class="identifier">default_precision</span><span class="special">();</span> + <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">default_precision</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">digits10</span><span class="special">);</span> + <span class="keyword">unsigned</span> <span class="identifier">precision</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> + <span class="keyword">void</span> <span class="identifier">precision</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">digits10</span><span class="special">);</span> + <span class="comment">// Comparison:</span> + <span class="keyword">int</span> <span class="identifier">compare</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">>&</span> <span class="identifier">o</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">V</span><span class="special">></span> + <span class="keyword">typename</span> <span class="identifier">enable_if</span><span class="special"><</span><span class="identifier">is_convertible</span><span class="special"><</span><span class="identifier">V</span><span class="special">,</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> <span class="special">>,</span> <span class="keyword">int</span><span class="special">>::</span><span class="identifier">type</span> + <span class="identifier">compare</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">V</span><span class="special">&</span> <span class="identifier">o</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> + <span class="comment">// Access to the underlying implementation:</span> + <span class="identifier">Backend</span><span class="special">&</span> <span class="identifier">backend</span><span class="special">();</span> + <span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&</span> <span class="identifier">backend</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> +<span class="special">};</span> + +<span class="comment">// Non member operators:</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">+(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">-(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">+(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">-(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">*(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">/(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="comment">// Integer only operations:</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">%(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">&(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">|(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">^(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special"><<(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">>>(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&);</span> +<span class="comment">// Comparison operators:</span> +<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special"><</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">></span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special"><=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">>=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> + +<span class="comment">// Swap:</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">b</span><span class="special">);</span> + +<span class="comment">// iostream support:</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special"><<</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&</span> <span class="identifier">os</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">r</span><span class="special">);</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special"><<</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&</span> <span class="identifier">os</span><span class="special">,</span> <span class="keyword">const</span> <span class="emphasis"><em>unmentionable-expression-template-type</em></span><span class="special">&</span> <span class="identifier">r</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">istream</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">>></span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">istream</span><span class="special">&</span> <span class="identifier">is</span><span class="special">,</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">r</span><span class="special">);</span> + +<span class="comment">// Arithmetic with a higher precision result:</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ResultType</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Source1</span> <span class="keyword">class</span> <span class="identifier">Source2</span><span class="special">></span> +<span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">add</span><span class="special">(</span><span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source1</span><span class="special">&</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source2</span><span class="special">&</span> <span class="identifier">b</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ResultType</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Source1</span> <span class="keyword">class</span> <span class="identifier">Source2</span><span class="special">></span> +<span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">subtract</span><span class="special">(</span><span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source1</span><span class="special">&</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source2</span><span class="special">&</span> <span class="identifier">b</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ResultType</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Source1</span> <span class="keyword">class</span> <span class="identifier">Source2</span><span class="special">></span> +<span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">multiply</span><span class="special">(</span><span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source1</span><span class="special">&</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source2</span><span class="special">&</span> <span class="identifier">b</span><span class="special">);</span> + +<span class="comment">// Non-member function standard library support:</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">abs</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">fabs</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">sqrt</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">floor</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">ceil</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">trunc</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">itrunc</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">ltrunc</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">lltrunc</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">round</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">iround</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">lround</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">llround</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">exp</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">log</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">log10</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">cos</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">sin</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">tan</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">acos</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">asin</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">atan</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">cosh</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">sinh</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">tanh</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> + +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">ldexp</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="emphasis"><em>integer-type</em></span><span class="special">);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">frexp</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="emphasis"><em>integer-type</em></span><span class="special">*);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">pow</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">fmod</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">atan2</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">scalbn</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="emphasis"><em>integer-type</em></span><span class="special">);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">logb</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>integer-type</em></span> <span class="identifier">ilogb</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> + +<span class="comment">// Traits support:</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">component_type</span><span class="special">;</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">number_category</span><span class="special">;</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">is_number</span><span class="special">;</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">is_number_expression</span><span class="special">;</span> + +<span class="comment">// Integer specific functions:</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">gcd</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">lcm</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">pow</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">unsigned</span><span class="special">);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">powm</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">b</span><span class="special">,</span> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">p</span><span class="special">,</span> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">m</span><span class="special">);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">sqrt</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">EXpressionTemplates</span><span class="special">></span> <span class="identifier">sqrt</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">EXpressionTemplates</span><span class="special">>&);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">divide_qr</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">y</span><span class="special">,</span> + <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">q</span><span class="special">,</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">r</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">></span> +<span class="identifier">Integer</span> <span class="identifier">integer_modulus</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">Integer</span> <span class="identifier">val</span><span class="special">);</span> +<span class="keyword">unsigned</span> <span class="identifier">lsb</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">x</span><span class="special">);</span> +<span class="keyword">unsigned</span> <span class="identifier">msb</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">x</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">bit_test</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">bit_set</span><span class="special">(</span><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">bit_unset</span><span class="special">(</span><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">bit_flip</span><span class="special">(</span><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Engine</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">miller_rabin_test</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">n</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">trials</span><span class="special">,</span> <span class="identifier">Engine</span><span class="special">&</span> <span class="identifier">gen</span><span class="special">);</span> +<span class="keyword">bool</span> <span class="identifier">miller_rabin_test</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">n</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">trials</span><span class="special">);</span> + +<span class="comment">// Rational number support:</span> +<span class="keyword">typename</span> <span class="identifier">component_type</span><span class="special"><</span><span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">numerator</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="keyword">typename</span> <span class="identifier">component_type</span><span class="special"><</span><span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">denominator</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> + +<span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">math</span><span class="special">{</span> + +<span class="comment">// Boost.Math interoperability functions:</span> +<span class="keyword">int</span> <span class="identifier">fpclassify</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">int</span><span class="special">);</span> +<span class="keyword">bool</span> <span class="identifier">isfinite</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">int</span><span class="special">);</span> +<span class="keyword">bool</span> <span class="identifier">isnan</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">int</span><span class="special">);</span> +<span class="keyword">bool</span> <span class="identifier">isinf</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">int</span><span class="special">);</span> +<span class="keyword">bool</span> <span class="identifier">isnormal</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">int</span><span class="special">);</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> + +<span class="comment">// numeric_limits support:</span> +<span class="keyword">namespace</span> <span class="identifier">std</span><span class="special">{</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">numeric_limits</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">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> <span class="special">></span> +<span class="special">{</span> + <span class="comment">/* Usual members here */</span> +<span class="special">};</span> + +<span class="special">}</span> +</pre> +<h5> +<a name="boost_multiprecision.ref.number.h1"></a> + <span class="phrase"><a name="boost_multiprecision.ref.number.description"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.description">Description</a> + </h5> +<pre class="programlisting"><span class="keyword">enum</span> <span class="identifier">expression_template_option</span> <span class="special">{</span> <span class="identifier">et_on</span> <span class="special">=</span> <span class="number">1</span><span class="special">,</span> <span class="identifier">et_off</span> <span class="special">=</span> <span class="number">0</span> <span class="special">};</span> +</pre> +<p> + This enumerated type is used to specify whether expression templates are + turned on (et_on) or turned off (et_off). + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">expression_template_default</span> +<span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">expression_template_option</span> <span class="identifier">value</span> <span class="special">=</span> <span class="identifier">et_on</span><span class="special">;</span> <span class="special">};</span> +</pre> +<p> + This traits class specifies the default expression template option to be + used with a particular Backend type. It defaults to <code class="computeroutput"><span class="identifier">et_on</span></code>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span> <span class="special">=</span> <span class="identifier">expression_template_default</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">>::</span><span class="identifier">value</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">number</span><span class="special">;</span> +</pre> +<p> + Class <code class="computeroutput"><span class="identifier">number</span></code> has two template + arguments: + </p> +<div class="variablelist"> +<p class="title"><b></b></p> +<dl class="variablelist"> +<dt><span class="term">Backend</span></dt> +<dd><p> + The actual arithmetic back-end that does all the work. + </p></dd> +<dt><span class="term">ExpressionTemplates</span></dt> +<dd><p> + A Boolean value: when <code class="computeroutput"><span class="identifier">et_on</span></code>, + then expression templates are enabled, otherwise when set to <code class="computeroutput"><span class="identifier">et_off</span></code> they are disabled. The default + for this parameter is computed via the traits class <code class="computeroutput"><span class="identifier">expression_template_default</span></code> + whose member <code class="computeroutput"><span class="identifier">value</span></code> + defaults to <code class="computeroutput"><span class="identifier">et_on</span></code> unless + the traits class is specialized for a particular backend. + </p></dd> +</dl> +</div> +<pre class="programlisting"><span class="identifier">number</span><span class="special">();</span> +<span class="identifier">number</span><span class="special">(</span><span class="identifier">see</span><span class="special">-</span><span class="identifier">below</span><span class="special">);</span> +<span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">see</span><span class="special">-</span><span class="identifier">below</span><span class="special">);</span> +<span class="identifier">number</span><span class="special">&</span> <span class="identifier">assign</span><span class="special">(</span><span class="identifier">see</span><span class="special">-</span><span class="identifier">below</span><span class="special">);</span> +</pre> +<p> + Type <code class="computeroutput"><span class="identifier">number</span></code> is default constructible, + and both copy constructible and assignable from: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + Itself. + </li> +<li class="listitem"> + An expression template which is the result of one of the arithmetic operators. + </li> +<li class="listitem"> + Any builtin arithmetic type, as long as the result would not be lossy + (for example float to integer conversion). + </li> +<li class="listitem"> + Any type that the Backend is implicitly constructible or assignable from. + </li> +<li class="listitem"> + An rvalue reference to another <code class="computeroutput"><span class="identifier">number</span></code>. + Move-semantics are used for construction if the backend also supports + rvalue reference construction. In the case of assignment, move semantics + are always supported when the argument is an rvalue reference irrespective + of the backend. + </li> +<li class="listitem"> + Any type in the same family, as long as no loss of precision is involved. + For example from <code class="computeroutput"><span class="identifier">int128_t</span></code> + to <code class="computeroutput"><span class="identifier">int256_t</span></code>, or <code class="computeroutput"><span class="identifier">cpp_dec_float_50</span></code> to <code class="computeroutput"><span class="identifier">cpp_dec_float_100</span></code>. + </li> +</ul></div> +<p> + Type <code class="computeroutput"><span class="identifier">number</span></code> is explicitly + constructible from: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + Any type mentioned above. + </li> +<li class="listitem"> + A <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span></code> or any type which is convertible + to <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span></code>. + </li> +<li class="listitem"> + Any arithmetic type (including those that would result in lossy conversions). + </li> +<li class="listitem"> + Any type in the same family, including those that result in loss of precision. + </li> +<li class="listitem"> + Any type that the Backend is explicitly constructible from. + </li> +<li class="listitem"> + Any pair of types for which a generic interconversion exists: that is + from integer to integer, integer to rational, integer to float, rational + to rational, rational to float, or float to float. + </li> +</ul></div> +<p> + The assign member function is available for any type for which an explicit + converting constructor exists. It is intended to be used where a temporary + generated from an explicit assignment would be expensive, for example: + </p> +<pre class="programlisting"><span class="identifier">mpfr_float_50</span> <span class="identifier">f50</span><span class="special">;</span> +<span class="identifier">mpfr_float_100</span> <span class="identifier">f100</span><span class="special">;</span> + +<span class="identifier">f50</span> <span class="special">=</span> <span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">mpfr_float_50</span><span class="special">>(</span><span class="identifier">f100</span><span class="special">);</span> <span class="comment">// explicit cast create a temporary</span> +<span class="identifier">f50</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">f100</span><span class="special">);</span> <span class="comment">// explicit call to assign create no temporary</span> +</pre> +<p> + In addition, if the type has multiple components (for example rational or + complex number types), then there is a two argument constructor: + </p> +<pre class="programlisting"><span class="identifier">number</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">,</span> <span class="identifier">arg2</span><span class="special">);</span> +</pre> +<p> + Where the two args must either be arithmetic types, or types that are convertible + to the two components of <code class="computeroutput"><span class="keyword">this</span></code>. + </p> +<pre class="programlisting"><span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">+=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">-=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">*=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">/=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++();</span> +<span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">--();</span> +<span class="identifier">number</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span> +<span class="identifier">number</span> <span class="keyword">operator</span><span class="special">--(</span><span class="keyword">int</span><span class="special">);</span> +<span class="comment">// Integer only operations:</span> +<span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">%=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">&=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">|=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">^=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special"><<=(</span><span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&);</span> +<span class="identifier">number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">>>=(</span><span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&);</span> +</pre> +<p> + These operators all take their usual arithmetic meanings. + </p> +<p> + The arguments to these operators is either: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + Another <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> + <span class="identifier">ExpressionTemplates</span><span class="special">></span></code>. + </li> +<li class="listitem"> + An expression template derived from <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">></span></code>. + </li> +<li class="listitem"> + Any type implicitly convertible to <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span></code>, including some other instance of + class <code class="computeroutput"><span class="identifier">number</span></code>. + </li> +</ul></div> +<p> + For the left and right shift operations, the argument must be a builtin integer + type with a positive value (negative values result in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + being thrown). + </p> +<pre class="programlisting"><span class="keyword">operator</span> <span class="emphasis"><em>convertible-to-bool-type</em></span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + Returns an <span class="emphasis"><em>unmentionable-type</em></span> that is usable in Boolean + contexts (this allows <code class="computeroutput"><span class="identifier">number</span></code> + to be used in any Boolean context - if statements, conditional statements, + or as an argument to a logical operator - without type <code class="computeroutput"><span class="identifier">number</span></code> + being convertible to type <code class="computeroutput"><span class="keyword">bool</span></code>. + </p> +<p> + This operator also enables the use of <code class="computeroutput"><span class="identifier">number</span></code> + with any of the following operators: <code class="computeroutput"><span class="special">!</span></code>, + <code class="computeroutput"><span class="special">||</span></code>, <code class="computeroutput"><span class="special">&&</span></code> + and <code class="computeroutput"><span class="special">?:</span></code>. + </p> +<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">number</span><span class="special">&</span> <span class="identifier">other</span><span class="special">);</span> +</pre> +<p> + Swaps <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + with <code class="computeroutput"><span class="identifier">other</span></code>. + </p> +<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">is_zero</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + Returns <code class="computeroutput"><span class="keyword">true</span></code> is <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is zero, + otherwise <code class="computeroutput"><span class="keyword">false</span></code>. + </p> +<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">sign</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + Returns a value less than zero if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is negative, a value greater than zero + if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + is positive, and zero if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + is zero. + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">str</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">precision</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">scientific</span> <span class="special">=</span> <span class="keyword">true</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + Returns the number formatted as a string, with at least <span class="emphasis"><em>precision</em></span> + digits, and in scientific format if <span class="emphasis"><em>scientific</em></span> is true. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> +<span class="identifier">T</span> <span class="identifier">convert_to</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> +<span class="keyword">explicit</span> <span class="keyword">operator</span> <span class="identifier">T</span> <span class="special">()</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + Provides a generic conversion mechanism to convert <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> to type <code class="computeroutput"><span class="identifier">T</span></code>. + Type <code class="computeroutput"><span class="identifier">T</span></code> may be any arithmetic + type. Optionally other types may also be supported by specific <code class="computeroutput"><span class="identifier">Backend</span></code> types. + </p> +<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">unsigned</span> <span class="identifier">default_precision</span><span class="special">();</span> +<span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">default_precision</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">digits10</span><span class="special">);</span> +<span class="keyword">unsigned</span> <span class="identifier">precision</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> +<span class="keyword">void</span> <span class="identifier">precision</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">digits10</span><span class="special">);</span> +</pre> +<p> + These functions are only available if the Backend template parameter supports + runtime changes to precision. They get and set the default precision and + the precision of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> + respectively. + </p> +<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">compare</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">o</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">V</span><span class="special">></span> +<span class="keyword">typename</span> <span class="identifier">enable_if</span><span class="special"><</span><span class="identifier">is_convertible</span><span class="special"><</span><span class="identifier">V</span><span class="special">,</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> <span class="special">>,</span> <span class="keyword">int</span><span class="special">>::</span><span class="identifier">type</span> + <span class="identifier">compare</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">V</span><span class="special">&</span> <span class="identifier">other</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span> +</pre> +<p> + Returns: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + A value less that 0 for <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span> <span class="special"><</span> <span class="identifier">other</span></code> + </li> +<li class="listitem"> + A value greater that 0 for <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span> <span class="special">></span> <span class="identifier">other</span></code> + </li> +<li class="listitem"> +<p class="simpara"> + Zero for <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span> + <span class="special">==</span> <span class="identifier">other</span></code> + </p> +<pre class="programlisting"><span class="identifier">Backend</span><span class="special">&</span> <span class="identifier">backend</span><span class="special">();</span> +<span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&</span> <span class="identifier">backend</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> +</pre> +</li> +</ul></div> +<p> + Returns the underlying back-end instance used by <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>. + </p> +<h5> +<a name="boost_multiprecision.ref.number.h2"></a> + <span class="phrase"><a name="boost_multiprecision.ref.number.non_member_operators"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.non_member_operators">Non-member + operators</a> + </h5> +<pre class="programlisting"><span class="comment">// Non member operators:</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">+(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">-(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">+(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">-(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">*(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">/(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="comment">// Integer only operations:</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">%(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">&(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">|(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">^(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special"><<(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">>>(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&);</span> +<span class="comment">// Comparison operators:</span> +<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special"><</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">></span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special"><=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">>=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&);</span> +</pre> +<p> + These operators all take their usual arithmetic meanings. + </p> +<p> + The arguments to these functions must contain at least one of the following: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + A <code class="computeroutput"><span class="identifier">number</span></code>. + </li> +<li class="listitem"> + An expression template type derived from <code class="computeroutput"><span class="identifier">number</span></code>. + </li> +<li class="listitem"> + Any type for which <code class="computeroutput"><span class="identifier">number</span></code> + has an implicit constructor - for example a builtin arithmetic type. + </li> +</ul></div> +<p> + The return type of these operators is either: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + An <span class="emphasis"><em>unmentionable-type</em></span> expression template type when + <code class="computeroutput"><span class="identifier">ExpressionTemplates</span></code> is + <code class="computeroutput"><span class="keyword">true</span></code>. + </li> +<li class="listitem"> + Type <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> + <span class="identifier">et_off</span><span class="special">></span></code> + when <code class="computeroutput"><span class="identifier">ExpressionTemplates</span></code> + is <code class="computeroutput"><span class="keyword">false</span></code>. + </li> +<li class="listitem"> + Type <code class="computeroutput"><span class="keyword">bool</span></code> if the operator + is a comparison operator. + </li> +</ul></div> +<p> + Finally note that the second argument to the left and right shift operations + must be a builtin integer type, and that the argument must be positive (negative + arguments result in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + being thrown). + </p> +<h5> +<a name="boost_multiprecision.ref.number.h3"></a> + <span class="phrase"><a name="boost_multiprecision.ref.number.swap"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.swap">swap</a> + </h5> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">b</span><span class="special">);</span> +</pre> +<p> + Swaps <code class="computeroutput"><span class="identifier">a</span></code> and <code class="computeroutput"><span class="identifier">b</span></code>. + </p> +<h5> +<a name="boost_multiprecision.ref.number.h4"></a> + <span class="phrase"><a name="boost_multiprecision.ref.number.iostream_support"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.iostream_support">Iostream + Support</a> + </h5> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special"><<</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&</span> <span class="identifier">os</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">r</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Unspecified</span><span class="special">...></span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special"><<</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&</span> <span class="identifier">os</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">unmentionable</span><span class="special">-</span><span class="identifier">expression</span><span class="special">-</span><span class="keyword">template</span><span class="special">&</span> <span class="identifier">r</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="keyword">inline</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">istream</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">>></span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">istream</span><span class="special">&</span> <span class="identifier">is</span><span class="special">,</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">r</span><span class="special">)</span> +</pre> +<p> + These operators provided formatted input-output operations on <code class="computeroutput"><span class="identifier">number</span></code> types, and expression templates + derived from them. + </p> +<p> + It's down to the back-end type to actually implement string conversion. However, + the back-ends provided with this library support all of the iostream formatting + flags, field width and precision settings. + </p> +<h5> +<a name="boost_multiprecision.ref.number.h5"></a> + <span class="phrase"><a name="boost_multiprecision.ref.number.arithmetic_with_a_higher_precisi"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.arithmetic_with_a_higher_precisi">Arithmetic + with a higher precision result</a> + </h5> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ResultType</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Source1</span> <span class="keyword">class</span> <span class="identifier">Source2</span><span class="special">></span> +<span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">add</span><span class="special">(</span><span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source1</span><span class="special">&</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source2</span><span class="special">&</span> <span class="identifier">b</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ResultType</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Source1</span> <span class="keyword">class</span> <span class="identifier">Source2</span><span class="special">></span> +<span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">subtract</span><span class="special">(</span><span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source1</span><span class="special">&</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source2</span><span class="special">&</span> <span class="identifier">b</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ResultType</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Source1</span> <span class="keyword">class</span> <span class="identifier">Source2</span><span class="special">></span> +<span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">multiply</span><span class="special">(</span><span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source1</span><span class="special">&</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source2</span><span class="special">&</span> <span class="identifier">b</span><span class="special">);</span> +</pre> +<p> + These functions apply the named operator to the arguments <span class="emphasis"><em>a</em></span> + and <span class="emphasis"><em>b</em></span> and store the result in <span class="emphasis"><em>result</em></span>, + returning <span class="emphasis"><em>result</em></span>. In all cases they behave "as + if" arguments <span class="emphasis"><em>a</em></span> and <span class="emphasis"><em>b</em></span> were + first promoted to type <code class="computeroutput"><span class="identifier">ResultType</span></code> + before applying the operator, though particular backends may well avoid that + step by way of an optimization. + </p> +<p> + The type <code class="computeroutput"><span class="identifier">ResultType</span></code> must + be an instance of class <code class="computeroutput"><span class="identifier">number</span></code>, + and the types <code class="computeroutput"><span class="identifier">Source1</span></code> and + <code class="computeroutput"><span class="identifier">Source2</span></code> may be either instances + of class <code class="computeroutput"><span class="identifier">number</span></code> or native + integer types. The latter is an optimization that allows arithmetic to be + performed on native integer types producing an extended precision result. + </p> +<h5> +<a name="boost_multiprecision.ref.number.h6"></a> + <span class="phrase"><a name="boost_multiprecision.ref.number.non_member_standard_library_func"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.non_member_standard_library_func">Non-member + standard library function support</a> + </h5> +<pre class="programlisting"><span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">abs</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">fabs</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">sqrt</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">floor</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">ceil</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">trunc</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">itrunc</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">ltrunc</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">lltrunc</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">round</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">iround</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">lround</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">llround</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">exp</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">log</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">log10</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">cos</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">sin</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">tan</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">acos</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">asin</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">atan</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">cosh</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">sinh</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">tanh</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> + +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">ldexp</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="emphasis"><em>integer-type</em></span><span class="special">);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">frexp</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="emphasis"><em>integer-type</em></span><span class="special">*);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">pow</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">fmod</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">atan2</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">scalbn</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="emphasis"><em>integer-type</em></span><span class="special">);</span> +<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">logb</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="emphasis"><em>integer-type</em></span> <span class="identifier">ilogb</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +</pre> +<p> + These functions all behave exactly as their standard library C++11 counterparts + do: their argument is either an instance of <code class="computeroutput"><span class="identifier">number</span></code> + or an expression template derived from it; If the argument is of type <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">et_off</span><span class="special">></span></code> + then that is also the return type, otherwise the return type is an expression + template. + </p> +<p> + The integer type arguments to <code class="computeroutput"><span class="identifier">ldexp</span></code>, + <code class="computeroutput"><span class="identifier">frexp</span></code>, <code class="computeroutput"><span class="identifier">scalbn</span></code> + and <code class="computeroutput"><span class="identifier">ilogb</span></code> may be either type + <code class="computeroutput"><span class="keyword">int</span></code>, or the actual type of the + exponent of the number type. + </p> +<p> + These functions are normally implemented by the Backend type. However, default + versions are provided for Backend types that don't have native support for + these functions. Please note however, that this default support requires + the precision of the type to be a compile time constant - this means for + example that the <a href="http://gmplib.org" target="_top">GMP</a> MPF Backend will + not work with these functions when that type is used at variable precision. + </p> +<p> + Also note that with the exception of <code class="computeroutput"><span class="identifier">abs</span></code> + that these functions can only be used with floating-point Backend types (if + any other types such as fixed precision or complex types are added to the + library later, then these functions may be extended to support those number + types). + </p> +<p> + The precision of these functions is generally determined by the backend implementation. + For example the precision of these functions when used with <a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float">mpfr_float</a> + is determined entirely by <a href="http://www.mpfr.org" target="_top">MPFR</a>. + When these functions use our own implementations, the accuracy of the transcendental + functions is generally a few epsilon. Note however, that the trigonometrical + functions incur the usual accuracy loss when reducing arguments by large + multiples of π. Also note that both <a class="link" href="../tut/floats/gmp_float.html" title="gmp_float">gmp_float</a> + and <a class="link" href="../tut/floats/cpp_dec_float.html" title="cpp_dec_float">cpp_dec_float</a> + have a number of guard digits beyond their stated precision, so the error + rates listed for these are in some sense artificially low. + </p> +<p> + The following table shows the error rates we observe for these functions + with various backend types, functions not listed here are exact (tested on + Win32 with VC++10, MPFR-3.0.0, MPIR-2.1.1): + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Function + </p> + </th> +<th> + <p> + mpfr_float_50 + </p> + </th> +<th> + <p> + mpf_float_50 + </p> + </th> +<th> + <p> + cpp_dec_float_50 + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + sqrt + </p> + </td> +<td> + <p> + 1eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +</tr> +<tr> +<td> + <p> + exp + </p> + </td> +<td> + <p> + 1eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +</tr> +<tr> +<td> + <p> + log + </p> + </td> +<td> + <p> + 1eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +</tr> +<tr> +<td> + <p> + log10 + </p> + </td> +<td> + <p> + 1eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +</tr> +<tr> +<td> + <p> + cos + </p> + </td> +<td> + <p> + 700eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +</tr> +<tr> +<td> + <p> + sin + </p> + </td> +<td> + <p> + 1eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +</tr> +<tr> +<td> + <p> + tan + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +</tr> +<tr> +<td> + <p> + acos + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +</tr> +<tr> +<td> + <p> + asin + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +</tr> +<tr> +<td> + <p> + atan + </p> + </td> +<td> + <p> + 1eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +</tr> +<tr> +<td> + <p> + cosh + </p> + </td> +<td> + <p> + 1045eps<a href="#ftn.boost_multiprecision.ref.number.f0" class="footnote" name="boost_multiprecision.ref.number.f0"><sup class="footnote">[1]</sup></a> + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +</tr> +<tr> +<td> + <p> + sinh + </p> + </td> +<td> + <p> + 2eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +</tr> +<tr> +<td> + <p> + tanh + </p> + </td> +<td> + <p> + 1eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +</tr> +<tr> +<td> + <p> + pow + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +<td> + <p> + 4eps + </p> + </td> +<td> + <p> + 3eps + </p> + </td> +</tr> +<tr> +<td> + <p> + atan2 + </p> + </td> +<td> + <p> + 1eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +<td> + <p> + 0eps + </p> + </td> +</tr> +</tbody> +<tbody class="footnotes"><tr><td colspan="4"><div id="ftn.boost_multiprecision.ref.number.f0" class="footnote"><p><a href="#boost_multiprecision.ref.number.f0" class="para"><sup class="para">[1] </sup></a> + It's likely that the inherent error in the input values to our + test cases are to blame here. + </p></div></td></tr></tbody> +</table></div> +<h5> +<a name="boost_multiprecision.ref.number.h7"></a> + <span class="phrase"><a name="boost_multiprecision.ref.number.traits_class_support"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.traits_class_support">Traits Class + Support</a> + </h5> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">component_type</span><span class="special">;</span> +</pre> +<p> + If this is a type with multiple components (for example rational or complex + types), then this trait has a single member <code class="computeroutput"><span class="identifier">type</span></code> + that is the type of those components. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">number_category</span><span class="special">;</span> +</pre> +<p> + A traits class that inherits from <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span></code> + where <code class="computeroutput"><span class="identifier">N</span></code> is one of the enumerated + values <code class="computeroutput"><span class="identifier">number_kind_integer</span></code>, + <code class="computeroutput"><span class="identifier">number_kind_floating_point</span></code>, + <code class="computeroutput"><span class="identifier">number_kind_rational</span></code>, <code class="computeroutput"><span class="identifier">number_kind_fixed_point</span></code>, or <code class="computeroutput"><span class="identifier">number_kind_unknown</span></code>. This traits class + is specialized for any type that has <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code> + support as well as for classes in this library: which means it can be used + for generic code that must work with built in arithmetic types as well as + multiprecision ones. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">is_number</span><span class="special">;</span> +</pre> +<p> + A traits class that inherits from <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code> + if T is an instance of <code class="computeroutput"><span class="identifier">number</span><span class="special"><></span></code>, otherwise from <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span></code>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">is_number_expression</span><span class="special">;</span> +</pre> +<p> + A traits class that inherits from <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code> + if T is an expression template type derived from <code class="computeroutput"><span class="identifier">number</span><span class="special"><></span></code>, otherwise from <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span></code>. + </p> +<h5> +<a name="boost_multiprecision.ref.number.h8"></a> + <span class="phrase"><a name="boost_multiprecision.ref.number.integer_functions"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.integer_functions">Integer + functions</a> + </h5> +<p> + In addition to functioning with types from this library, these functions + are also overloaded for built in integer types if you include <code class="computeroutput"><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">integer</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>. + Further, when used with fixed precision types (whether built in integers + or multiprecision ones), the functions will promote to a wider type internally + when the algorithm requires it. Versions overloaded for built in integer + types return that integer type rather than an expression template. + </p> +<pre class="programlisting"><span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">gcd</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">b</span><span class="special">);</span> +</pre> +<p> + Returns the largest integer <code class="computeroutput"><span class="identifier">x</span></code> + that divides both <code class="computeroutput"><span class="identifier">a</span></code> and + <code class="computeroutput"><span class="identifier">b</span></code>. + </p> +<pre class="programlisting"><span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">lcm</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">b</span><span class="special">);</span> +</pre> +<p> + Returns the smallest integer <code class="computeroutput"><span class="identifier">x</span></code> + that is divisible by both <code class="computeroutput"><span class="identifier">a</span></code> + and <code class="computeroutput"><span class="identifier">b</span></code>. + </p> +<pre class="programlisting"><span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">pow</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">b</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">p</span><span class="special">);</span> +</pre> +<p> + Returns <span class="emphasis"><em>b<sup>p</sup></em></span> as an expression template. Note that this + function should be used with extreme care as the result can grow so large + as to take "effectively forever" to compute, or else simply run + the host machine out of memory. This is the one function in this category + that is not overloaded for built in integer types, further, it's probably + not a good idea to use it with fixed precision <code class="computeroutput"><span class="identifier">cpp_int</span></code>'s + either. + </p> +<pre class="programlisting"><span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">powm</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">b</span><span class="special">,</span> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">p</span><span class="special">,</span> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">m</span><span class="special">);</span> +</pre> +<p> + Returns <span class="emphasis"><em>b<sup>p</sup> mod m</em></span> as an expression template. Fixed precision + types are promoted internally to ensure accuracy. + </p> +<pre class="programlisting"><span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">sqrt</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">a</span><span class="special">);</span> +</pre> +<p> + Returns the largest integer <code class="computeroutput"><span class="identifier">x</span></code> + such that <code class="computeroutput"><span class="identifier">x</span> <span class="special">*</span> + <span class="identifier">x</span> <span class="special"><</span> + <span class="identifier">a</span></code>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">EXpressionTemplates</span><span class="special">></span> <span class="identifier">sqrt</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">EXpressionTemplates</span><span class="special">>&</span> <span class="identifier">r</span><span class="special">);</span> +</pre> +<p> + Returns the largest integer <code class="computeroutput"><span class="identifier">x</span></code> + such that <code class="computeroutput"><span class="identifier">x</span> <span class="special">*</span> + <span class="identifier">x</span> <span class="special"><</span> + <span class="identifier">a</span></code>, and sets the remainder <code class="computeroutput"><span class="identifier">r</span></code> such that <code class="computeroutput"><span class="identifier">r</span> + <span class="special">=</span> <span class="identifier">a</span> <span class="special">-</span> <span class="identifier">x</span> <span class="special">*</span> + <span class="identifier">x</span></code>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">divide_qr</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">y</span><span class="special">,</span> + <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">q</span><span class="special">,</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">r</span><span class="special">);</span> +</pre> +<p> + Divides x by y and returns both the quotient and remainder. After the call + <code class="computeroutput"><span class="identifier">q</span> <span class="special">=</span> + <span class="identifier">x</span> <span class="special">/</span> <span class="identifier">y</span></code> and <code class="computeroutput"><span class="identifier">r</span> + <span class="special">=</span> <span class="identifier">x</span> <span class="special">%</span> <span class="identifier">y</span></code>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">></span> +<span class="identifier">Integer</span> <span class="identifier">integer_modulus</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">Integer</span> <span class="identifier">val</span><span class="special">);</span> +</pre> +<p> + Returns the absolute value of <code class="computeroutput"><span class="identifier">x</span> + <span class="special">%</span> <span class="identifier">val</span></code>. + </p> +<pre class="programlisting"><span class="keyword">unsigned</span> <span class="identifier">lsb</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">x</span><span class="special">);</span> +</pre> +<p> + Returns the (zero-based) index of the least significant bit that is set to + 1. + </p> +<p> + Throws a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">range_error</span></code> if the argument is <= 0. + </p> +<pre class="programlisting"><span class="keyword">unsigned</span> <span class="identifier">msb</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">x</span><span class="special">);</span> +</pre> +<p> + Returns the (zero-based) index of the most significant bit. + </p> +<p> + Throws a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">range_error</span></code> if the argument is <= 0. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">bit_test</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span> +</pre> +<p> + Returns <code class="computeroutput"><span class="keyword">true</span></code> if the bit at + <span class="emphasis"><em>index</em></span> in <span class="emphasis"><em>val</em></span> is set. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">bit_set</span><span class="special">(</span><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span> +</pre> +<p> + Sets the bit at <span class="emphasis"><em>index</em></span> in <span class="emphasis"><em>val</em></span>, and + returns <span class="emphasis"><em>val</em></span>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">bit_unset</span><span class="special">(</span><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span> +</pre> +<p> + Unsets the bit at <span class="emphasis"><em>index</em></span> in <span class="emphasis"><em>val</em></span>, + and returns <span class="emphasis"><em>val</em></span>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">bit_flip</span><span class="special">(</span><span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span> +</pre> +<p> + Flips the bit at <span class="emphasis"><em>index</em></span> in <span class="emphasis"><em>val</em></span>, + and returns <span class="emphasis"><em>val</em></span>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Engine</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">miller_rabin_test</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">n</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">trials</span><span class="special">,</span> <span class="identifier">Engine</span><span class="special">&</span> <span class="identifier">gen</span><span class="special">);</span> +<span class="keyword">bool</span> <span class="identifier">miller_rabin_test</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">n</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">trials</span><span class="special">);</span> +</pre> +<p> + Tests to see if the number <span class="emphasis"><em>n</em></span> is probably prime - the + test excludes the vast majority of composite numbers by excluding small prime + factors and performing a single Fermat test. Then performs <span class="emphasis"><em>trials</em></span> + Miller-Rabin tests. Returns <code class="computeroutput"><span class="keyword">false</span></code> + if <span class="emphasis"><em>n</em></span> is definitely composite, or <code class="computeroutput"><span class="keyword">true</span></code> + if <span class="emphasis"><em>n</em></span> is probably prime with the probability of it being + composite less than 0.25^trials. Fixed precision types are promoted internally + to ensure accuracy. + </p> +<h5> +<a name="boost_multiprecision.ref.number.h9"></a> + <span class="phrase"><a name="boost_multiprecision.ref.number.rational_number_functions"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.rational_number_functions">Rational + Number Functions</a> + </h5> +<pre class="programlisting"><span class="keyword">typename</span> <span class="identifier">component_type</span><span class="special"><</span><span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">numerator</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +<span class="keyword">typename</span> <span class="identifier">component_type</span><span class="special"><</span><span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">denominator</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&);</span> +</pre> +<p> + These functions return the numerator and denominator of a rational number + respectively. + </p> +<h5> +<a name="boost_multiprecision.ref.number.h10"></a> + <span class="phrase"><a name="boost_multiprecision.ref.number.boost_math_interoperability_supp"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.boost_math_interoperability_supp">Boost.Math + Interoperability Support</a> + </h5> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">math</span><span class="special">{</span> + +<span class="keyword">int</span> <span class="identifier">fpclassify</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">int</span><span class="special">);</span> +<span class="keyword">bool</span> <span class="identifier">isfinite</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">int</span><span class="special">);</span> +<span class="keyword">bool</span> <span class="identifier">isnan</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">int</span><span class="special">);</span> +<span class="keyword">bool</span> <span class="identifier">isinf</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">int</span><span class="special">);</span> +<span class="keyword">bool</span> <span class="identifier">isnormal</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">int</span><span class="special">);</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> +</pre> +<p> + These floating-point classification functions behave exactly as their Boost.Math + equivalents. + </p> +<p> + Other Boost.Math functions and templates may also be specialized or overloaded + to ensure interoperability. + </p> +<h5> +<a name="boost_multiprecision.ref.number.h11"></a> + <span class="phrase"><a name="boost_multiprecision.ref.number.std_numeric_limits_support"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.std_numeric_limits_support">std::numeric_limits + support</a> + </h5> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">std</span><span class="special">{</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">numeric_limits</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">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> <span class="special">></span> +<span class="special">{</span> + <span class="comment">/* Usual members here */</span> +<span class="special">};</span> + +<span class="special">}</span> +</pre> +<p> + Class template <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code> is specialized for all instantiations + of <code class="computeroutput"><span class="identifier">number</span></code> whose precision + is known at compile time, plus those types whose precision is unlimited (though + it is much less useful in those cases). It is not specialized for types whose + precision can vary at compile time (such as <code class="computeroutput"><span class="identifier">mpf_float</span></code>). + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.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="cpp_int_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/ref/tom_int_ref.html b/libs/multiprecision/doc/html/boost_multiprecision/ref/tom_int_ref.html new file mode 100644 index 0000000000..bd48e112a7 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/ref/tom_int_ref.html @@ -0,0 +1,63 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>tom_int</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../ref.html" title="Reference"> +<link rel="prev" href="gmp_int_ref.html" title="gmp_int"> +<link rel="next" href="mpf_ref.html" title="gmp_float"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="gmp_int_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.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="mpf_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.ref.tom_int_ref"></a><a class="link" href="tom_int_ref.html" title="tom_int">tom_int</a> +</h3></div></div></div> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">class</span> <span class="identifier">tommath_int</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">tommath_int</span> <span class="special">></span> <span class="identifier">tom_int</span><span class="special">;</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> +</pre> +<p> + Class template <code class="computeroutput"><span class="identifier">tommath_int</span></code> + fulfils all of the requirements for a <a class="link" href="backendconc.html" title="Backend Requirements">Backend</a> + type. Its members and non-member functions are deliberately not documented: + these are considered implementation details that are subject to change. + </p> +<p> + The type of <code class="computeroutput"><span class="identifier">number_category</span><span class="special"><</span><span class="identifier">cpp_int</span><span class="special"><</span><span class="identifier">Args</span><span class="special">...></span> <span class="special">>::</span><span class="identifier">type</span></code> is <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special"><</span><span class="identifier">number_kind_integer</span><span class="special">></span></code>. + </p> +<p> + More information on this type can be found in the <a class="link" href="../tut/ints/tom_int.html" title="tom_int">tutorial</a>. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="gmp_int_ref.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.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="mpf_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut.html b/libs/multiprecision/doc/html/boost_multiprecision/tut.html new file mode 100644 index 0000000000..6c79552511 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut.html @@ -0,0 +1,131 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Tutorial</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="prev" href="intro.html" title="Introduction"> +<link rel="next" href="tut/ints.html" title="Integer Types"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="intro.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="tut/ints.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="boost_multiprecision.tut"></a><a class="link" href="tut.html" title="Tutorial">Tutorial</a> +</h2></div></div></div> +<div class="toc"><dl class="toc"> +<dt><span class="section"><a href="tut/ints.html">Integer Types</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="tut/ints/cpp_int.html">cpp_int</a></span></dt> +<dt><span class="section"><a href="tut/ints/gmp_int.html">gmp_int</a></span></dt> +<dt><span class="section"><a href="tut/ints/tom_int.html">tom_int</a></span></dt> +<dt><span class="section"><a href="tut/ints/egs.html">Examples</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="tut/ints/egs/factorials.html">Factorials</a></span></dt> +<dt><span class="section"><a href="tut/ints/egs/bitops.html">Bit Operations</a></span></dt> +</dl></dd> +</dl></dd> +<dt><span class="section"><a href="tut/floats.html">Floating Point Numbers</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="tut/floats/cpp_bin_float.html">cpp_bin_float</a></span></dt> +<dt><span class="section"><a href="tut/floats/cpp_dec_float.html">cpp_dec_float</a></span></dt> +<dt><span class="section"><a href="tut/floats/gmp_float.html">gmp_float</a></span></dt> +<dt><span class="section"><a href="tut/floats/mpfr_float.html">mpfr_float</a></span></dt> +<dt><span class="section"><a href="tut/floats/float128.html">float128</a></span></dt> +<dt><span class="section"><a href="tut/floats/fp_eg.html">Examples</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="tut/floats/fp_eg/aos.html">Area of + Circle</a></span></dt> +<dt><span class="section"><a href="tut/floats/fp_eg/jel.html">Defining + a Special Function.</a></span></dt> +<dt><span class="section"><a href="tut/floats/fp_eg/nd.html">Calculating + a Derivative</a></span></dt> +<dt><span class="section"><a href="tut/floats/fp_eg/gi.html">Calculating + an Integral</a></span></dt> +<dt><span class="section"><a href="tut/floats/fp_eg/poly_eg.html">Polynomial + Evaluation</a></span></dt> +</dl></dd> +</dl></dd> +<dt><span class="section"><a href="tut/interval.html">Interval Number Types</a></span></dt> +<dd><dl><dt><span class="section"><a href="tut/interval/mpfi.html">mpfi_float</a></span></dt></dl></dd> +<dt><span class="section"><a href="tut/rational.html">Rational Number Types</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="tut/rational/cpp_rational.html">cpp_rational</a></span></dt> +<dt><span class="section"><a href="tut/rational/gmp_rational.html">gmp_rational</a></span></dt> +<dt><span class="section"><a href="tut/rational/tommath_rational.html">tommath_rational</a></span></dt> +<dt><span class="section"><a href="tut/rational/br.html">Use With Boost.Rational</a></span></dt> +<dt><span class="section"><a href="tut/rational/rational_adaptor.html">rational_adaptor</a></span></dt> +</dl></dd> +<dt><span class="section"><a href="tut/misc.html">Miscellaneous Number Types.</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="tut/misc/logged_adaptor.html">logged_adaptor</a></span></dt> +<dt><span class="section"><a href="tut/misc/debug_adaptor.html">debug_adaptor</a></span></dt> +<dt><span class="section"><a href="tut/misc/visualizers.html">Visual C++ + Debugger Visualizers</a></span></dt> +</dl></dd> +<dt><span class="section"><a href="tut/conversions.html">Constructing and + Interconverting Between Number Types</a></span></dt> +<dt><span class="section"><a href="tut/random.html">Generating Random Numbers</a></span></dt> +<dt><span class="section"><a href="tut/primetest.html">Primality Testing</a></span></dt> +<dt><span class="section"><a href="tut/lits.html">Literal Types and <code class="computeroutput"><span class="keyword">constexpr</span></code> Support</a></span></dt> +<dt><span class="section"><a href="tut/rounding.html">Rounding Rules for + Conversions</a></span></dt> +<dt><span class="section"><a href="tut/mixed.html">Mixed Precision Arithmetic</a></span></dt> +<dt><span class="section"><a href="tut/gen_int.html">Generic Integer Operations</a></span></dt> +<dt><span class="section"><a href="tut/serial.html">Boost.Serialization + Support</a></span></dt> +<dt><span class="section"><a href="tut/limits.html">Numeric Limits</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="tut/limits/constants.html">std::numeric_limits<> + constants</a></span></dt> +<dt><span class="section"><a href="tut/limits/functions.html">std::numeric_limits<> + functions</a></span></dt> +<dt><span class="section"><a href="tut/limits/limits32.html">Numeric limits + for 32-bit platform</a></span></dt> +<dt><span class="section"><a href="tut/limits/how_to_tell.html">How to + Determine the Kind of a Number From <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code></a></span></dt> +</dl></dd> +<dt><span class="section"><a href="tut/input_output.html">Input Output</a></span></dt> +</dl></div> +<p> + In order to use this library you need to make two choices: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + What kind of number do I want (<a class="link" href="tut/ints.html" title="Integer Types">integer</a>, + <a class="link" href="tut/floats.html" title="Floating Point Numbers">floating point</a> or + <a class="link" href="tut/rational.html" title="Rational Number Types">rational</a>). + </li> +<li class="listitem"> + Which back-end do I want to perform the actual arithmetic (Boost-supplied, + GMP, MPFR, Tommath etc)? + </li> +</ul></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="intro.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="tut/ints.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/conversions.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/conversions.html new file mode 100644 index 0000000000..1550ecef0a --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/conversions.html @@ -0,0 +1,216 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Constructing and Interconverting Between Number Types</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../tut.html" title="Tutorial"> +<link rel="prev" href="misc/visualizers.html" title="Visual C++ Debugger Visualizers"> +<link rel="next" href="random.html" title="Generating Random Numbers"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="misc/visualizers.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="random.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.tut.conversions"></a><a class="link" href="conversions.html" title="Constructing and Interconverting Between Number Types">Constructing and + Interconverting Between Number Types</a> +</h3></div></div></div> +<p> + All of the number types that are based on <code class="computeroutput"><span class="identifier">number</span></code> + have certain conversion rules in common. In particular: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> +<p class="simpara"> + Any number type can be constructed (or assigned) from any builtin arithmetic + type, as long as the conversion isn't lossy (for example float to int + conversion): + </p> +<pre class="programlisting"><span class="identifier">cpp_dec_float_50</span> <span class="identifier">df</span><span class="special">(</span><span class="number">0.5</span><span class="special">);</span> <span class="comment">// OK construction from double</span> +<span class="identifier">cpp_int</span> <span class="identifier">i</span><span class="special">(</span><span class="number">450</span><span class="special">);</span> <span class="comment">// OK constructs from signed int</span> +<span class="identifier">cpp_int</span> <span class="identifier">j</span> <span class="special">=</span> <span class="number">3.14</span><span class="special">;</span> <span class="comment">// Error, lossy conversion.</span> +</pre> +</li> +<li class="listitem"> +<p class="simpara"> + A number can be explicitly constructed from an arithmetic type, even + when the conversion is lossy: + </p> +<pre class="programlisting"><span class="identifier">cpp_int</span> <span class="identifier">i</span><span class="special">(</span><span class="number">3.14</span><span class="special">);</span> <span class="comment">// OK explicit conversion</span> +<span class="identifier">i</span> <span class="special">=</span> <span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">cpp_int</span><span class="special">>(</span><span class="number">3.14</span><span class="special">)</span> <span class="comment">// OK explicit conversion</span> +<span class="identifier">i</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="number">3.14</span><span class="special">);</span> <span class="comment">// OK, explicit assign and avoid a temporary from the cast above</span> +<span class="identifier">i</span> <span class="special">=</span> <span class="number">3.14</span><span class="special">;</span> <span class="comment">// Error, no implicit assignment operator for lossy conversion.</span> +<span class="identifier">cpp_int</span> <span class="identifier">j</span> <span class="special">=</span> <span class="number">3.14</span><span class="special">;</span> <span class="comment">// Error, no implicit constructor for lossy conversion.</span> +</pre> +</li> +<li class="listitem"> +<p class="simpara"> + A <code class="computeroutput"><span class="identifier">number</span></code> can be converted + to any built in type, via the <code class="computeroutput"><span class="identifier">convert_to</span></code> + member function: + </p> +<pre class="programlisting"><span class="identifier">mpz_int</span> <span class="identifier">z</span><span class="special">(</span><span class="number">2</span><span class="special">);</span> +<span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="identifier">z</span><span class="special">.</span><span class="keyword">template</span> <span class="identifier">convert_to</span><span class="special"><</span><span class="keyword">int</span><span class="special">>();</span> <span class="comment">// sets i to 2</span> +</pre> +</li> +<li class="listitem"> + Conversions to rational numbers from floating point ones are always allowed, + and are exact and implicit as long as the rational number uses an unbounded + integer type. Please be aware that constructing a rational number from + an extended precision floating point type with a large exponent range + can effectively run the system out of memory, as in the extreme case + <span class="emphasis"><em>2<sup>max_exponent</sup> / CHAR_BITS</em></span> bytes of storage may be + required. This does not represent a problem for built in floating point + types however, as the exponent range for these is rather limited. + </li> +<li class="listitem"> + Conversions to floating point numbers from rational ones are rounded + to nearest (less than 0.5ulp error) as long as the floating point number + is binary, and the integer type used by the rational number is unbounded. + </li> +</ul></div> +<p> + Additional conversions may be supported by particular backends. + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> +<p class="simpara"> + A <code class="computeroutput"><span class="identifier">number</span></code> can be converted + to any built in type, via an explicit conversion operator: this functionality + is only available on compilers supporting C++11's explicit conversion + syntax. + </p> +<pre class="programlisting"><span class="identifier">mpz_int</span> <span class="identifier">z</span><span class="special">(</span><span class="number">2</span><span class="special">);</span> +<span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="identifier">z</span><span class="special">;</span> <span class="comment">// Error, implicit conversion not allowed.</span> +<span class="keyword">int</span> <span class="identifier">j</span> <span class="special">=</span> <span class="keyword">static_cast</span><span class="special"><</span><span class="keyword">int</span><span class="special">>(</span><span class="identifier">z</span><span class="special">);</span> <span class="comment">// OK explicit conversion.</span> +</pre> +</li> +<li class="listitem"> +<p class="simpara"> + Any number type can be <span class="emphasis"><em>explicitly</em></span> constructed (or + assigned) from a <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span></code> + or a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span></code>: + </p> +<pre class="programlisting"><span class="comment">// pi to 50 places from a string:</span> +<span class="identifier">cpp_dec_float_50</span> <span class="identifier">df</span><span class="special">(</span><span class="string">"3.14159265358979323846264338327950288419716939937510"</span><span class="special">);</span> +<span class="comment">// Integer type will automatically detect "0x" and "0" prefixes and parse the string accordingly:</span> +<span class="identifier">cpp_int</span> <span class="identifier">i</span><span class="special">(</span><span class="string">"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000"</span><span class="special">);</span> +<span class="comment">// Invalid input always results in a std::runtime_error being thrown:</span> +<span class="identifier">i</span> <span class="special">=</span> <span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">cpp_int</span><span class="special">>(</span><span class="string">"3.14"</span><span class="special">);</span> +<span class="comment">// implicit conversions from strings are not allowed:</span> +<span class="identifier">i</span> <span class="special">=</span> <span class="string">"23"</span><span class="special">;</span> <span class="comment">// Error, no assignment operator for implicit conversion from string</span> +<span class="comment">// assign member function, avoids having to create a temporary via a static_cast:</span> +<span class="identifier">i</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="string">"23"</span><span class="special">);</span> <span class="comment">// OK</span> +</pre> +</li> +<li class="listitem"> +<p class="simpara"> + Any number type will interoperate with the builtin types in arithmetic + expressions as long as the conversions are not lossy: + </p> +<pre class="programlisting"><span class="comment">// pi to 50 places from a string:</span> +<span class="identifier">cpp_dec_float_50</span> <span class="identifier">df</span> <span class="special">=</span> <span class="string">"3.14159265358979323846264338327950288419716939937510"</span><span class="special">;</span> +<span class="comment">// Multiply by 2 - using an integer literal here is usually more efficient</span> +<span class="comment">// than constructing a temporary:</span> +<span class="identifier">df</span> <span class="special">*=</span> <span class="number">2</span><span class="special">;</span> + +<span class="comment">// You can't mix integer types with floats though:</span> +<span class="identifier">cpp_int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span> +<span class="identifier">i</span> <span class="special">*=</span> <span class="number">3.14</span><span class="special">;</span> <span class="comment">// Error, no *= operator will be found.</span> +</pre> +</li> +<li class="listitem"> +<p class="simpara"> + Any number type can be streamed to and from the C++ iostreams: + </p> +<pre class="programlisting"><span class="identifier">cpp_dec_float_50</span> <span class="identifier">df</span> <span class="special">=</span> <span class="string">"3.14159265358979323846264338327950288419716939937510"</span><span class="special">;</span> +<span class="comment">// Now print at full precision:</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</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_dec_float_50</span><span class="special">>::</span><span class="identifier">max_digits10</span><span class="special">)</span> + <span class="special"><<</span> <span class="identifier">df</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span> +<span class="identifier">cpp_int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> +<span class="identifier">i</span> <span class="special"><<=</span> <span class="number">256</span><span class="special">;</span> +<span class="comment">// Now print in hex format with prefix:</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">hex</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">showbase</span> <span class="special"><<</span> <span class="identifier">i</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +</pre> +</li> +<li class="listitem"> +<p class="simpara"> + Interconversions between number types of the same family are allowed + and are implicit conversions if no loss of precision is involved, and + explicit if it is: + </p> +<pre class="programlisting"><span class="identifier">int128_t</span> <span class="identifier">i128</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> +<span class="identifier">int266_t</span> <span class="identifier">i256</span> <span class="special">=</span> <span class="identifier">i128</span><span class="special">;</span> <span class="comment">// OK implicit widening conversion</span> +<span class="identifier">i128_t</span> <span class="special">=</span> <span class="identifier">i256</span><span class="special">;</span> <span class="comment">// Error, no assignment operator found, narrowing conversion is explicit</span> +<span class="identifier">i128_t</span> <span class="special">=</span> <span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">int128_t</span><span class="special">>(</span><span class="identifier">i256</span><span class="special">);</span> <span class="comment">// OK, explicit narrowing conversion</span> + +<span class="identifier">mpz_int</span> <span class="identifier">z</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> +<span class="identifier">mpf_float</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">z</span><span class="special">;</span> <span class="comment">// OK, GMP handles this conversion natively, and it's not lossy and therefore implicit</span> + +<span class="identifier">mpf_float_50</span> <span class="identifier">f50</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span> +<span class="identifier">f</span> <span class="special">=</span> <span class="identifier">f50</span><span class="special">;</span> <span class="comment">// OK, conversion from fixed to variable precision, f will have 50 digits precision.</span> +<span class="identifier">f50</span> <span class="special">=</span> <span class="identifier">f</span><span class="special">;</span> <span class="comment">// Error, conversion from variable to fixed precision is potentially lossy, explicit cast required.</span> +</pre> +</li> +<li class="listitem"> +<p class="simpara"> + Some interconversions between number types are completely generic, and + are always available, albeit the conversions are always <span class="emphasis"><em>explicit</em></span>: + </p> +<pre class="programlisting"><span class="identifier">cpp_int</span> <span class="identifier">cppi</span><span class="special">(</span><span class="number">2</span><span class="special">);</span> +<span class="comment">// We can always convert between numbers of the same category -</span> +<span class="comment">// int to int, rational to rational, or float to float, so this is OK</span> +<span class="comment">// as long as we use an explicit conversion:</span> +<span class="identifier">mpz_int</span> <span class="identifier">z</span><span class="special">(</span><span class="identifier">cppi</span><span class="special">);</span> +<span class="comment">// We can always promote from int to rational, int to float, or rational to float:</span> +<span class="identifier">cpp_rational</span> <span class="identifier">cppr</span><span class="special">(</span><span class="identifier">cppi</span><span class="special">);</span> <span class="comment">// OK, int to rational</span> +<span class="identifier">cpp_dec_float_50</span> <span class="identifier">df</span><span class="special">(</span><span class="identifier">cppi</span><span class="special">);</span> <span class="comment">// OK, int to float</span> +<span class="identifier">df</span> <span class="special">=</span> <span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">cpp_dec_float_50</span><span class="special">>(</span><span class="identifier">cppr</span><span class="special">);</span> <span class="comment">// OK, explicit rational to float conversion</span> +<span class="comment">// However narrowing and/or implicit conversions always fail:</span> +<span class="identifier">cppi</span> <span class="special">=</span> <span class="identifier">df</span><span class="special">;</span> <span class="comment">// Compiler error, conversion not allowed</span> +</pre> +</li> +<li class="listitem"> +<p class="simpara"> + Other interconversions may be allowed as special cases, whenever the + backend allows it: + </p> +<pre class="programlisting"><span class="identifier">mpf_t</span> <span class="identifier">m</span><span class="special">;</span> <span class="comment">// Native GMP type.</span> +<span class="identifier">mpf_init_set_ui</span><span class="special">(</span><span class="identifier">m</span><span class="special">,</span> <span class="number">0</span><span class="special">);</span> <span class="comment">// set to a value;</span> +<span class="identifier">mpf_float</span> <span class="identifier">i</span><span class="special">(</span><span class="identifier">m</span><span class="special">);</span> <span class="comment">// copies the value of the native type.</span> +</pre> +</li> +</ul></div> +<p> + More information on what additional types a backend supports conversions + from are given in the tutorial for each backend. The converting constructor + will be implicit if the backend's converting constructor is also implicit, + and explicit if the backends converting constructor is also explicit. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="misc/visualizers.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="random.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/floats.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats.html new file mode 100644 index 0000000000..e99ebb1d42 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats.html @@ -0,0 +1,277 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Floating Point Numbers</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../tut.html" title="Tutorial"> +<link rel="prev" href="ints/egs/bitops.html" title="Bit Operations"> +<link rel="next" href="floats/cpp_bin_float.html" title="cpp_bin_float"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="ints/egs/bitops.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="floats/cpp_bin_float.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.tut.floats"></a><a class="link" href="floats.html" title="Floating Point Numbers">Floating Point Numbers</a> +</h3></div></div></div> +<div class="toc"><dl class="toc"> +<dt><span class="section"><a href="floats/cpp_bin_float.html">cpp_bin_float</a></span></dt> +<dt><span class="section"><a href="floats/cpp_dec_float.html">cpp_dec_float</a></span></dt> +<dt><span class="section"><a href="floats/gmp_float.html">gmp_float</a></span></dt> +<dt><span class="section"><a href="floats/mpfr_float.html">mpfr_float</a></span></dt> +<dt><span class="section"><a href="floats/float128.html">float128</a></span></dt> +<dt><span class="section"><a href="floats/fp_eg.html">Examples</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="floats/fp_eg/aos.html">Area of + Circle</a></span></dt> +<dt><span class="section"><a href="floats/fp_eg/jel.html">Defining + a Special Function.</a></span></dt> +<dt><span class="section"><a href="floats/fp_eg/nd.html">Calculating + a Derivative</a></span></dt> +<dt><span class="section"><a href="floats/fp_eg/gi.html">Calculating + an Integral</a></span></dt> +<dt><span class="section"><a href="floats/fp_eg/poly_eg.html">Polynomial + Evaluation</a></span></dt> +</dl></dd> +</dl></div> +<p> + The following back-ends provide floating point arithmetic: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend Type + </p> + </th> +<th> + <p> + Header + </p> + </th> +<th> + <p> + Radix + </p> + </th> +<th> + <p> + Dependencies + </p> + </th> +<th> + <p> + Pros + </p> + </th> +<th> + <p> + Cons + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">cpp_bin_float</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span></code> + </p> + </td> +<td> + <p> + boost/multiprecision/cpp_bin_float.hpp + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + None + </p> + </td> +<td> + <p> + Header only, all C++ implementation. Boost licence. + </p> + </td> +<td> + <p> + Approximately 2x slower than the <a href="http://www.mpfr.org" target="_top">MPFR</a> + or <a href="http://gmplib.org" target="_top">GMP</a> libraries. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">cpp_dec_float</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span></code> + </p> + </td> +<td> + <p> + boost/multiprecision/cpp_dec_float.hpp + </p> + </td> +<td> + <p> + 10 + </p> + </td> +<td> + <p> + None + </p> + </td> +<td> + <p> + Header only, all C++ implementation. Boost licence. + </p> + </td> +<td> + <p> + Approximately 2x slower than the <a href="http://www.mpfr.org" target="_top">MPFR</a> + or <a href="http://gmplib.org" target="_top">GMP</a> libraries. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">mpf_float</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span></code> + </p> + </td> +<td> + <p> + boost/multiprecision/gmp.hpp + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + <a href="http://gmplib.org" target="_top">GMP</a> + </p> + </td> +<td> + <p> + Very fast and efficient back-end. + </p> + </td> +<td> + <p> + Dependency on GNU licensed <a href="http://gmplib.org" target="_top">GMP</a> + library. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">mpfr_float</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span></code> + </p> + </td> +<td> + <p> + boost/multiprecision/mpfr.hpp + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + <a href="http://gmplib.org" target="_top">GMP</a> and <a href="http://www.mpfr.org" target="_top">MPFR</a> + </p> + </td> +<td> + <p> + Very fast and efficient back-end, with its own standard library + implementation. + </p> + </td> +<td> + <p> + Dependency on GNU licensed <a href="http://gmplib.org" target="_top">GMP</a> + and <a href="http://www.mpfr.org" target="_top">MPFR</a> libraries. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">float128</span></code> + </p> + </td> +<td> + <p> + boost/multiprecision/float128.hpp + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + Either <a href="http://gcc.gnu.org/onlinedocs/libquadmath/" target="_top">libquadmath</a> + or the Intel C++ Math library. + </p> + </td> +<td> + <p> + Very fast and efficient back-end for 128-bit floating point values + (113-bit mantissa, equivalent to FORTRAN's QUAD real) + </p> + </td> +<td> + <p> + Depends on the compiler being either recent GCC or Intel C++ versions. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="ints/egs/bitops.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="floats/cpp_bin_float.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_bin_float.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_bin_float.html new file mode 100644 index 0000000000..ea235149e7 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_bin_float.html @@ -0,0 +1,198 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>cpp_bin_float</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../floats.html" title="Floating Point Numbers"> +<link rel="prev" href="../floats.html" title="Floating Point Numbers"> +<link rel="next" href="cpp_dec_float.html" title="cpp_dec_float"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../floats.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../floats.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="cpp_dec_float.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.floats.cpp_bin_float"></a><a class="link" href="cpp_bin_float.html" title="cpp_bin_float">cpp_bin_float</a> +</h4></div></div></div> +<p> + <code class="computeroutput"><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></code> + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">enum</span> <span class="identifier">digit_base_type</span> +<span class="special">{</span> + <span class="identifier">digit_base_2</span> <span class="special">=</span> <span class="number">2</span><span class="special">,</span> + <span class="identifier">digit_base_10</span> <span class="special">=</span> <span class="number">10</span> +<span class="special">};</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">Digits</span><span class="special">,</span> <span class="identifier">digit_base_type</span> <span class="identifier">base</span> <span class="special">=</span> <span class="identifier">digit_base_10</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Exponent</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">,</span> <span class="identifier">ExponentMin</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> <span class="identifier">ExponentMax</span> <span class="special">=</span> <span class="number">0</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">cpp_bin_float</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_bin_float</span><span class="special"><</span><span class="number">50</span><span class="special">></span> <span class="special">></span> <span class="identifier">cpp_bin_float_50</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_bin_float</span><span class="special"><</span><span class="number">100</span><span class="special">></span> <span class="special">></span> <span class="identifier">cpp_bin_float_100</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">backends</span><span class="special">::</span><span class="identifier">cpp_bin_float</span><span class="special"><</span><span class="number">24</span><span class="special">,</span> <span class="identifier">backends</span><span class="special">::</span><span class="identifier">digit_base_2</span><span class="special">,</span> <span class="keyword">void</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">int16_t</span><span class="special">,</span> <span class="special">-</span><span class="number">126</span><span class="special">,</span> <span class="number">127</span><span class="special">>,</span> <span class="identifier">et_off</span><span class="special">></span> <span class="identifier">cpp_bin_float_single</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">backends</span><span class="special">::</span><span class="identifier">cpp_bin_float</span><span class="special"><</span><span class="number">53</span><span class="special">,</span> <span class="identifier">backends</span><span class="special">::</span><span class="identifier">digit_base_2</span><span class="special">,</span> <span class="keyword">void</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">int16_t</span><span class="special">,</span> <span class="special">-</span><span class="number">1022</span><span class="special">,</span> <span class="number">1023</span><span class="special">>,</span> <span class="identifier">et_off</span><span class="special">></span> <span class="identifier">cpp_bin_float_double</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">backends</span><span class="special">::</span><span class="identifier">cpp_bin_float</span><span class="special"><</span><span class="number">64</span><span class="special">,</span> <span class="identifier">backends</span><span class="special">::</span><span class="identifier">digit_base_2</span><span class="special">,</span> <span class="keyword">void</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">int16_t</span><span class="special">,</span> <span class="special">-</span><span class="number">16382</span><span class="special">,</span> <span class="number">16383</span><span class="special">>,</span> <span class="identifier">et_off</span><span class="special">></span> <span class="identifier">cpp_bin_float_double_extended</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">backends</span><span class="special">::</span><span class="identifier">cpp_bin_float</span><span class="special"><</span><span class="number">113</span><span class="special">,</span> <span class="identifier">backends</span><span class="special">::</span><span class="identifier">digit_base_2</span><span class="special">,</span> <span class="keyword">void</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">int16_t</span><span class="special">,</span> <span class="special">-</span><span class="number">16382</span><span class="special">,</span> <span class="number">16383</span><span class="special">>,</span> <span class="identifier">et_off</span><span class="special">></span> <span class="identifier">cpp_bin_float_quad</span><span class="special">;</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> +</pre> +<p> + The <code class="computeroutput"><span class="identifier">cpp_bin_float</span></code> back-end + is used in conjunction with <code class="computeroutput"><span class="identifier">number</span></code>: + It acts as an entirely C++ (header only and dependency free) floating-point + number type that is a drop-in replacement for the native C++ floating-point + types, but with much greater precision. + </p> +<p> + Type <code class="computeroutput"><span class="identifier">cpp_bin_float</span></code> can + be used at fixed precision by specifying a non-zero <code class="computeroutput"><span class="identifier">Digits</span></code> + template parameter. The typedefs <code class="computeroutput"><span class="identifier">cpp_bin_float_50</span></code> + and <code class="computeroutput"><span class="identifier">cpp_bin_float_100</span></code> provide + arithmetic types at 50 and 100 decimal digits precision respectively. + </p> +<p> + Optionally, you can specify whether the precision is specified in decimal + digits or binary bits - for example to declare a <code class="computeroutput"><span class="identifier">cpp_bin_float</span></code> + with exactly the same precision as <code class="computeroutput"><span class="keyword">double</span></code> + one would use <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_bin_float</span><span class="special"><</span><span class="number">53</span><span class="special">,</span> <span class="identifier">digit_base_2</span><span class="special">></span> <span class="special">></span></code>. + The typedefs <code class="computeroutput"><span class="identifier">cpp_bin_float_single</span></code>, + <code class="computeroutput"><span class="identifier">cpp_bin_float_double</span></code>, + <code class="computeroutput"><span class="identifier">cpp_bin_float_quad</span></code> and + <code class="computeroutput"><span class="identifier">cpp_bin_float_double_extended</span></code> + provide software analogues of the IEEE single, double and quad float data + types, plus the Intel-extended-double type respectively. Note that while + these types are functionally equivalent to the native IEEE types, but they + do not have the same size or bit-layout as true IEEE compatible types. + </p> +<p> + Normally <code class="computeroutput"><span class="identifier">cpp_bin_float</span></code> + allocates no memory: all of the space required for its digits are allocated + directly within the class. As a result care should be taken not to use + the class with too high a digit count as stack space requirements can grow + out of control. If that represents a problem then providing an allocator + as a template parameter causes <code class="computeroutput"><span class="identifier">cpp_bin_float</span></code> + to dynamically allocate the memory it needs: this significantly reduces + the size of <code class="computeroutput"><span class="identifier">cpp_bin_float</span></code> + and increases the viable upper limit on the number of digits at the expense + of performance. However, please bear in mind that arithmetic operations + rapidly become <span class="emphasis"><em>very</em></span> expensive as the digit count grows: + the current implementation really isn't optimized or designed for large + digit counts. Note that since the actual type of the objects allocated + is completely opaque, the suggestion would be to use an allocator with + <code class="computeroutput"><span class="keyword">void</span></code> <code class="computeroutput"><span class="identifier">value_type</span></code>, + for example: <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_bin_float</span><span class="special"><</span><span class="number">1000</span><span class="special">,</span> <span class="identifier">digit_base_10</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special"><</span><span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="special">></span></code>. + </p> +<p> + The final template parameters determine the type and range of the exponent: + parameter <code class="computeroutput"><span class="identifier">Exponent</span></code> can + be any signed integer type, but note that <code class="computeroutput"><span class="identifier">MinExponent</span></code> + and <code class="computeroutput"><span class="identifier">MaxExponent</span></code> can not + go right up to the limits of the <code class="computeroutput"><span class="identifier">Exponent</span></code> + type as there has to be a little extra headroom for internal calculations. + You will get a compile time error if this is the case. In addition if MinExponent + or MaxExponent are zero, then the library will choose suitable values that + are as large as possible given the constraints of the type and need for + extra headroom for internal calculations. + </p> +<p> + There is full standard library and <code class="computeroutput"><span class="identifier">numeric_limits</span></code> + support available for this type. + </p> +<p> + Things you should know when using this type: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + Default constructed <code class="computeroutput"><span class="identifier">cpp_bin_float</span></code>s + have a value of zero. + </li> +<li class="listitem"> + The radix of this type is 2, even when the precision is specified as + decimal digits. + </li> +<li class="listitem"> + The type supports both infinities and NaN's. An infinity is generated + whenever the result would overflow, and a NaN is generated for any + mathematically undefined operation. + </li> +<li class="listitem"> + There is a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code> specialisation for + this type. + </li> +<li class="listitem"> + Any <code class="computeroutput"><span class="identifier">number</span></code> instantiated + on this type, is convertible to any other <code class="computeroutput"><span class="identifier">number</span></code> + instantiated on this type - for example you can convert from <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_bin_float</span><span class="special"><</span><span class="number">50</span><span class="special">></span> <span class="special">></span></code> to <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_bin_float</span><span class="special"><</span><span class="identifier">SomeOtherValue</span><span class="special">></span> <span class="special">></span></code>. + Narrowing conversions round to nearest and are <code class="computeroutput"><span class="keyword">explicit</span></code>. + </li> +<li class="listitem"> + Conversion from a string results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + being thrown if the string can not be interpreted as a valid floating + point number. + </li> +<li class="listitem"> + All arithmetic operations are correctly rounded to nearest. String + conversions and the <code class="computeroutput"><span class="identifier">sqrt</span></code> + function are also correctly rounded, but transcendental functions (sin, + cos, pow, exp etc) are not. + </li> +</ul></div> +<h6> +<a name="boost_multiprecision.tut.floats.cpp_bin_float.h0"></a> + <span class="phrase"><a name="boost_multiprecision.tut.floats.cpp_bin_float.cpp_bin_float_example"></a></span><a class="link" href="cpp_bin_float.html#boost_multiprecision.tut.floats.cpp_bin_float.cpp_bin_float_example">cpp_bin_float + example:</a> + </h6> +<pre class="programlisting"><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="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">special_functions</span><span class="special">/</span><span class="identifier">gamma</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> +<span class="special">{</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span> + + <span class="comment">// Operations at fixed precision and full numeric_limits support:</span> + <span class="identifier">cpp_bin_float_100</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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_100</span><span class="special">>::</span><span class="identifier">digits</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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_100</span><span class="special">>::</span><span class="identifier">digits10</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="comment">// We can use any C++ std lib function, lets print all the digits as well:</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</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_100</span><span class="special">>::</span><span class="identifier">max_digits10</span><span class="special">)</span> + <span class="special"><<</span> <span class="identifier">log</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// print log(2)</span> + <span class="comment">// We can also use any function from Boost.Math:</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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">tgamma</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="comment">// These even work when the argument is an expression template:</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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">tgamma</span><span class="special">(</span><span class="identifier">b</span> <span class="special">*</span> <span class="identifier">b</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="comment">// And since we have an extended exponent range we can generate some really large </span> + <span class="comment">// numbers here (4.0238726007709377354370243e+2564):</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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">tgamma</span><span class="special">(</span><span class="identifier">cpp_bin_float_100</span><span class="special">(</span><span class="number">1000</span><span class="special">))</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../floats.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../floats.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="cpp_dec_float.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_dec_float.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_dec_float.html new file mode 100644 index 0000000000..09f5c827d0 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_dec_float.html @@ -0,0 +1,176 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>cpp_dec_float</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../floats.html" title="Floating Point Numbers"> +<link rel="prev" href="cpp_bin_float.html" title="cpp_bin_float"> +<link rel="next" href="gmp_float.html" title="gmp_float"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="cpp_bin_float.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../floats.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="gmp_float.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.floats.cpp_dec_float"></a><a class="link" href="cpp_dec_float.html" title="cpp_dec_float">cpp_dec_float</a> +</h4></div></div></div> +<p> + <code class="computeroutput"><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_dec_float</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExponentType</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">int32_t</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">cpp_dec_float</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_dec_float</span><span class="special"><</span><span class="number">50</span><span class="special">></span> <span class="special">></span> <span class="identifier">cpp_dec_float_50</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_dec_float</span><span class="special"><</span><span class="number">100</span><span class="special">></span> <span class="special">></span> <span class="identifier">cpp_dec_float_100</span><span class="special">;</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> +</pre> +<p> + The <code class="computeroutput"><span class="identifier">cpp_dec_float</span></code> back-end + is used in conjunction with <code class="computeroutput"><span class="identifier">number</span></code>: + It acts as an entirely C++ (header only and dependency free) floating-point + number type that is a drop-in replacement for the native C++ floating-point + types, but with much greater precision. + </p> +<p> + Type <code class="computeroutput"><span class="identifier">cpp_dec_float</span></code> can + be used at fixed precision by specifying a non-zero <code class="computeroutput"><span class="identifier">Digits10</span></code> + template parameter. The typedefs <code class="computeroutput"><span class="identifier">cpp_dec_float_50</span></code> + and <code class="computeroutput"><span class="identifier">cpp_dec_float_100</span></code> provide + arithmetic types at 50 and 100 decimal digits precision respectively. Optionally, + you can specify an integer type to use for the exponent, this defaults + to a 32-bit integer type which is more than large enough for the vast majority + of use cases, but larger types such as <code class="computeroutput"><span class="keyword">long</span> + <span class="keyword">long</span></code> can also be specified if you + need a truly huge exponent range. In any case the ExponentType must be + a built in signed integer type at least 2 bytes and 16-bits wide. + </p> +<p> + Normally <code class="computeroutput"><span class="identifier">cpp_dec_float</span></code> + allocates no memory: all of the space required for its digits are allocated + directly within the class. As a result care should be taken not to use + the class with too high a digit count as stack space requirements can grow + out of control. If that represents a problem then providing an allocator + as the final template parameter causes <code class="computeroutput"><span class="identifier">cpp_dec_float</span></code> + to dynamically allocate the memory it needs: this significantly reduces + the size of <code class="computeroutput"><span class="identifier">cpp_dec_float</span></code> + and increases the viable upper limit on the number of digits at the expense + of performance. However, please bear in mind that arithmetic operations + rapidly become <span class="emphasis"><em>very</em></span> expensive as the digit count grows: + the current implementation really isn't optimized or designed for large + digit counts. + </p> +<p> + There is full standard library and <code class="computeroutput"><span class="identifier">numeric_limits</span></code> + support available for this type. + </p> +<p> + Things you should know when using this type: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + Default constructed <code class="computeroutput"><span class="identifier">cpp_dec_float</span></code>s + have a value of zero. + </li> +<li class="listitem"> + The radix of this type is 10. As a result it can behave subtly differently + from base-2 types. + </li> +<li class="listitem"> + The type has a number of internal guard digits over and above those + specified in the template argument. Normally these should not be visible + to the user. + </li> +<li class="listitem"> + The type supports both infinities and NaN's. An infinity is generated + whenever the result would overflow, and a NaN is generated for any + mathematically undefined operation. + </li> +<li class="listitem"> + There is a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code> specialisation for + this type. + </li> +<li class="listitem"> + Any <code class="computeroutput"><span class="identifier">number</span></code> instantiated + on this type, is convertible to any other <code class="computeroutput"><span class="identifier">number</span></code> + instantiated on this type - for example you can convert from <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_dec_float</span><span class="special"><</span><span class="number">50</span><span class="special">></span> <span class="special">></span></code> to <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_dec_float</span><span class="special"><</span><span class="identifier">SomeOtherValue</span><span class="special">></span> <span class="special">></span></code>. + Narrowing conversions are truncating and <code class="computeroutput"><span class="keyword">explicit</span></code>. + </li> +<li class="listitem"> + Conversion from a string results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + being thrown if the string can not be interpreted as a valid floating + point number. + </li> +<li class="listitem"> + The actual precision of a <code class="computeroutput"><span class="identifier">cpp_dec_float</span></code> + is always slightly higher than the number of digits specified in the + template parameter, actually how much higher is an implementation detail + but is always at least 8 decimal digits. + </li> +<li class="listitem"> + Operations involving <code class="computeroutput"><span class="identifier">cpp_dec_float</span></code> + are always truncating. However, note that since their are guard digits + in effect, in practice this has no real impact on accuracy for most + use cases. + </li> +</ul></div> +<h6> +<a name="boost_multiprecision.tut.floats.cpp_dec_float.h0"></a> + <span class="phrase"><a name="boost_multiprecision.tut.floats.cpp_dec_float.cpp_dec_float_example"></a></span><a class="link" href="cpp_dec_float.html#boost_multiprecision.tut.floats.cpp_dec_float.cpp_dec_float_example">cpp_dec_float + example:</a> + </h6> +<pre class="programlisting"><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_dec_float</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<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">special_functions</span><span class="special">/</span><span class="identifier">gamma</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> +<span class="special">{</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span> + + <span class="comment">// Operations at fixed precision and full numeric_limits support:</span> + <span class="identifier">cpp_dec_float_100</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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_dec_float_100</span><span class="special">>::</span><span class="identifier">digits</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="comment">// Note that digits10 is the same as digits, since we're base 10! :</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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_dec_float_100</span><span class="special">>::</span><span class="identifier">digits10</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="comment">// We can use any C++ std lib function, lets print all the digits as well:</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</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_dec_float_100</span><span class="special">>::</span><span class="identifier">max_digits10</span><span class="special">)</span> + <span class="special"><<</span> <span class="identifier">log</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// print log(2)</span> + <span class="comment">// We can also use any function from Boost.Math:</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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">tgamma</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="comment">// These even work when the argument is an expression template:</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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">tgamma</span><span class="special">(</span><span class="identifier">b</span> <span class="special">*</span> <span class="identifier">b</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="comment">// And since we have an extended exponent range we can generate some really large </span> + <span class="comment">// numbers here (4.0238726007709377354370243e+2564):</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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">tgamma</span><span class="special">(</span><span class="identifier">cpp_dec_float_100</span><span class="special">(</span><span class="number">1000</span><span class="special">))</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="cpp_bin_float.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../floats.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="gmp_float.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/float128.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/float128.html new file mode 100644 index 0000000000..e4ba6f389b --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/float128.html @@ -0,0 +1,166 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>float128</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../floats.html" title="Floating Point Numbers"> +<link rel="prev" href="mpfr_float.html" title="mpfr_float"> +<link rel="next" href="fp_eg.html" title="Examples"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="mpfr_float.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../floats.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="fp_eg.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.floats.float128"></a><a class="link" href="float128.html" title="float128">float128</a> +</h4></div></div></div> +<p> + <code class="computeroutput"><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">float128</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">class</span> <span class="identifier">float128_backend</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">float128_backend</span><span class="special">,</span> <span class="identifier">et_off</span><span class="special">></span> <span class="identifier">float128</span><span class="special">;</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> +</pre> +<p> + The <code class="computeroutput"><span class="identifier">float128</span></code> number type + is a very thin wrapper around GCC's <code class="computeroutput"><a class="link" href="float128.html" title="float128">float128</a></code> + or Intel's <code class="computeroutput"><span class="identifier">_Quad</span></code> data types + and provides an real-number type that is a drop-in replacement for the + native C++ floating-point types, but with a 113 bit mantissa, and compatible + with FORTRAN's 128-bit QUAD real. + </p> +<p> + All the usual standard library and <code class="computeroutput"><span class="identifier">numeric_limits</span></code> + support are available, performance should be equivalent to the underlying + native types: for example the LINPACK benchmarks for GCC's <code class="computeroutput"><a class="link" href="float128.html" title="float128">float128</a></code> + and <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">float128</span></code> both achieved 5.6 MFLOPS<a href="#ftn.boost_multiprecision.tut.floats.float128.f0" class="footnote" name="boost_multiprecision.tut.floats.float128.f0"><sup class="footnote">[3]</sup></a>. + </p> +<p> + As well as the usual conversions from arithmetic and string types, instances + of <code class="computeroutput"><span class="identifier">float128</span></code> are copy constructible + and assignable from GCC's <code class="computeroutput"><a class="link" href="float128.html" title="float128">float128</a></code> + and Intel's <code class="computeroutput"><span class="identifier">_Quad</span></code> data + types. + </p> +<p> + It's also possible to access the underlying <code class="computeroutput"><a class="link" href="float128.html" title="float128">float128</a></code> + or <code class="computeroutput"><span class="identifier">_Quad</span></code> type via the + <code class="computeroutput"><span class="identifier">data</span><span class="special">()</span></code> + member function of <code class="computeroutput"><span class="identifier">float128_backend</span></code>. + </p> +<p> + Things you should know when using this type: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + Default constructed <code class="computeroutput"><span class="identifier">float128</span></code>s + have the value zero. + </li> +<li class="listitem"> + This backend supports rvalue-references and is move-aware, making instantiations + of <code class="computeroutput"><span class="identifier">number</span></code> on this backend + move aware. + </li> +<li class="listitem"> + It is not possible to round-trip objects of this type to and from a + string and get back exactly the same value when compiled with Intel's + C++ compiler and using <code class="computeroutput"><span class="identifier">_Quad</span></code> + as the underlying type: this is a current limitation of our code. Round + tripping when using <code class="computeroutput"><a class="link" href="float128.html" title="float128">float128</a></code> + as the underlying type is possible (both for GCC and Intel). + </li> +<li class="listitem"> + Conversion from a string results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + being thrown if the string can not be interpreted as a valid floating + point number. + </li> +<li class="listitem"> + Division by zero results in an infinity being produced. + </li> +<li class="listitem"> + Type <code class="computeroutput"><span class="identifier">float128</span></code> can be + used as a literal type (constexpr support). + </li> +<li class="listitem"> + When using the Intel compiler, the underlying type defaults to <code class="computeroutput"><a class="link" href="float128.html" title="float128">float128</a></code> + if it's available and <code class="computeroutput"><span class="identifier">_Quad</span></code> + if not. You can override the default by defining either <code class="computeroutput"><span class="identifier">BOOST_MP_USE_FLOAT128</span></code> or <code class="computeroutput"><span class="identifier">BOOST_MP_USE_QUAD</span></code>. + </li> +<li class="listitem"> + When the underlying type is Intel's <code class="computeroutput"><span class="identifier">_Quad</span></code> + type, the code must be compiled with the compiler option <code class="computeroutput"><span class="special">-</span><span class="identifier">Qoption</span><span class="special">,</span><span class="identifier">cpp</span><span class="special">,--</span><span class="identifier">extended_float_type</span></code>. + </li> +</ul></div> +<h6> +<a name="boost_multiprecision.tut.floats.float128.h0"></a> + <span class="phrase"><a name="boost_multiprecision.tut.floats.float128.float128_example"></a></span><a class="link" href="float128.html#boost_multiprecision.tut.floats.float128.float128_example">float128 + example:</a> + </h6> +<pre class="programlisting"><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">float128</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<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">special_functions</span><span class="special">/</span><span class="identifier">gamma</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> +<span class="special">{</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span> + + <span class="comment">// Operations at 128-bit precision and full numeric_limits support:</span> + <span class="identifier">float128</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span> + <span class="comment">// There are 113-bits of precision:</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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">float128</span><span class="special">>::</span><span class="identifier">digits</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="comment">// Or 34 decimal places:</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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">float128</span><span class="special">>::</span><span class="identifier">digits10</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="comment">// We can use any C++ std lib function, lets print all the digits as well:</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</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">float128</span><span class="special">>::</span><span class="identifier">max_digits10</span><span class="special">)</span> + <span class="special"><<</span> <span class="identifier">log</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// print log(2) = 0.693147180559945309417232121458176575</span> + <span class="comment">// We can also use any function from Boost.Math:</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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">tgamma</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="comment">// And since we have an extended exponent range we can generate some really large </span> + <span class="comment">// numbers here (4.02387260077093773543702433923004111e+2564):</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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">tgamma</span><span class="special">(</span><span class="identifier">float128</span><span class="special">(</span><span class="number">1000</span><span class="special">))</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="comment">//</span> + <span class="comment">// We can declare constants using GCC or Intel's native types, and the Q suffix,</span> + <span class="comment">// these can be declared constexpr if required:</span> + + <span class="keyword">constexpr</span> <span class="identifier">float128</span> <span class="identifier">pi</span> <span class="special">=</span> <span class="number">3.1415926535897932384626433832795028841971693993751058</span><span class="identifier">Q</span><span class="special">;</span> + + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<div class="footnotes"> +<br><hr style="width:100; text-align:left;margin-left: 0"> +<div id="ftn.boost_multiprecision.tut.floats.float128.f0" class="footnote"><p><a href="#boost_multiprecision.tut.floats.float128.f0" class="para"><sup class="para">[3] </sup></a> + On 64-bit Ubuntu 11.10, GCC-4.8.0, Intel Core 2 Duo T5800. + </p></div> +</div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="mpfr_float.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../floats.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="fp_eg.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg.html new file mode 100644 index 0000000000..f3f3aa33ca --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg.html @@ -0,0 +1,55 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Examples</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../floats.html" title="Floating Point Numbers"> +<link rel="prev" href="float128.html" title="float128"> +<link rel="next" href="fp_eg/aos.html" title="Area of Circle"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="float128.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../floats.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="fp_eg/aos.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.floats.fp_eg"></a><a class="link" href="fp_eg.html" title="Examples">Examples</a> +</h4></div></div></div> +<div class="toc"><dl class="toc"> +<dt><span class="section"><a href="fp_eg/aos.html">Area of + Circle</a></span></dt> +<dt><span class="section"><a href="fp_eg/jel.html">Defining + a Special Function.</a></span></dt> +<dt><span class="section"><a href="fp_eg/nd.html">Calculating + a Derivative</a></span></dt> +<dt><span class="section"><a href="fp_eg/gi.html">Calculating + an Integral</a></span></dt> +<dt><span class="section"><a href="fp_eg/poly_eg.html">Polynomial + Evaluation</a></span></dt> +</dl></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="float128.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../floats.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="fp_eg/aos.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/aos.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/aos.html new file mode 100644 index 0000000000..563ea65f07 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/aos.html @@ -0,0 +1,119 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Area of Circle</title> +<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../fp_eg.html" title="Examples"> +<link rel="prev" href="../fp_eg.html" title="Examples"> +<link rel="next" href="jel.html" title="Defining a Special Function."> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../fp_eg.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../fp_eg.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="jel.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="boost_multiprecision.tut.floats.fp_eg.aos"></a><a class="link" href="aos.html" title="Area of Circle">Area of + Circle</a> +</h5></div></div></div> +<p> + Generic numeric programming employs templates to use the same code for + different floating-point types and functions. Consider the area of a + circle a of radius r, given by + </p> +<div class="blockquote"><blockquote class="blockquote"><p> + <span class="emphasis"><em>a = π * r<sup>2</sup></em></span> + </p></blockquote></div> +<p> + The area of a circle can be computed in generic programming using Boost.Math + for the constant π as shown below: + </p> +<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> + +<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span> +<span class="keyword">inline</span> <span class="identifier">T</span> <span class="identifier">area_of_a_circle</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">r</span><span class="special">)</span> +<span class="special">{</span> + <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> + <span class="keyword">return</span> <span class="identifier">pi</span><span class="special"><</span><span class="identifier">T</span><span class="special">>()</span> <span class="special">*</span> <span class="identifier">r</span> <span class="special">*</span> <span class="identifier">r</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + It is possible to use <code class="computeroutput"><span class="identifier">area_of_a_circle</span><span class="special">()</span></code> with built-in floating-point types + as well as floating-point types from Boost.Multiprecision. In particular, + consider a system with 4-byte single-precision float, 8-byte double-precision + double and also the <code class="computeroutput"><span class="identifier">cpp_dec_float_50</span></code> + data type from Boost.Multiprecision with 50 decimal digits of precision. + </p> +<p> + We can compute and print the approximate area of a circle with radius + 123/100 for <code class="computeroutput"><span class="keyword">float</span></code>, <code class="computeroutput"><span class="keyword">double</span></code> and <code class="computeroutput"><span class="identifier">cpp_dec_float_50</span></code> + with the program below. + </p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iomanip</span><span class="special">></span> +<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_dec_float</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> + +<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_dec_float_50</span><span class="special">;</span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">char</span><span class="special">**)</span> +<span class="special">{</span> + <span class="keyword">const</span> <span class="keyword">float</span> <span class="identifier">r_f</span><span class="special">(</span><span class="keyword">float</span><span class="special">(</span><span class="number">123</span><span class="special">)</span> <span class="special">/</span> <span class="number">100</span><span class="special">);</span> + <span class="keyword">const</span> <span class="keyword">float</span> <span class="identifier">a_f</span> <span class="special">=</span> <span class="identifier">area_of_a_circle</span><span class="special">(</span><span class="identifier">r_f</span><span class="special">);</span> + + <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">r_d</span><span class="special">(</span><span class="keyword">double</span><span class="special">(</span><span class="number">123</span><span class="special">)</span> <span class="special">/</span> <span class="number">100</span><span class="special">);</span> + <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">a_d</span> <span class="special">=</span> <span class="identifier">area_of_a_circle</span><span class="special">(</span><span class="identifier">r_d</span><span class="special">);</span> + + <span class="keyword">const</span> <span class="identifier">cpp_dec_float_50</span> <span class="identifier">r_mp</span><span class="special">(</span><span class="identifier">cpp_dec_float_50</span><span class="special">(</span><span class="number">123</span><span class="special">)</span> <span class="special">/</span> <span class="number">100</span><span class="special">);</span> + <span class="keyword">const</span> <span class="identifier">cpp_dec_float_50</span> <span class="identifier">a_mp</span> <span class="special">=</span> <span class="identifier">area_of_a_circle</span><span class="special">(</span><span class="identifier">r_mp</span><span class="special">);</span> + + <span class="comment">// 4.75292</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</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="keyword">float</span><span class="special">>::</span><span class="identifier">digits10</span><span class="special">)</span> + <span class="special"><<</span> <span class="identifier">a_f</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + + <span class="comment">// 4.752915525616</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</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="keyword">double</span><span class="special">>::</span><span class="identifier">digits10</span><span class="special">)</span> + <span class="special"><<</span> <span class="identifier">a_d</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + + <span class="comment">// 4.7529155256159981904701331745635599135018975843146</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</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_dec_float_50</span><span class="special">>::</span><span class="identifier">digits10</span><span class="special">)</span> + <span class="special"><<</span> <span class="identifier">a_mp</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + In the next example we'll look at calling both standard library and Boost.Math + functions from within generic code. We'll also show how to cope with + template arguments which are expression-templates rather than number + types. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../fp_eg.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../fp_eg.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="jel.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/gi.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/gi.html new file mode 100644 index 0000000000..73a46081dd --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/gi.html @@ -0,0 +1,158 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Calculating an Integral</title> +<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../fp_eg.html" title="Examples"> +<link rel="prev" href="nd.html" title="Calculating a Derivative"> +<link rel="next" href="poly_eg.html" title="Polynomial Evaluation"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="nd.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../fp_eg.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="poly_eg.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="boost_multiprecision.tut.floats.fp_eg.gi"></a><a class="link" href="gi.html" title="Calculating an Integral">Calculating + an Integral</a> +</h5></div></div></div> +<p> + Similar to the generic derivative example, we can calculate integrals + in a similar manner: + </p> +<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">value_type</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">function_type</span><span class="special">></span> +<span class="keyword">inline</span> <span class="identifier">value_type</span> <span class="identifier">integral</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">a</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">b</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">tol</span><span class="special">,</span> + <span class="identifier">function_type</span> <span class="identifier">func</span><span class="special">)</span> +<span class="special">{</span> + <span class="keyword">unsigned</span> <span class="identifier">n</span> <span class="special">=</span> <span class="number">1U</span><span class="special">;</span> + + <span class="identifier">value_type</span> <span class="identifier">h</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">b</span> <span class="special">-</span> <span class="identifier">a</span><span class="special">);</span> + <span class="identifier">value_type</span> <span class="identifier">I</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">func</span><span class="special">(</span><span class="identifier">a</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">func</span><span class="special">(</span><span class="identifier">b</span><span class="special">))</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">h</span> <span class="special">/</span> <span class="number">2</span><span class="special">);</span> + + <span class="keyword">for</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">k</span> <span class="special">=</span> <span class="number">0U</span><span class="special">;</span> <span class="identifier">k</span> <span class="special"><</span> <span class="number">8U</span><span class="special">;</span> <span class="identifier">k</span><span class="special">++)</span> + <span class="special">{</span> + <span class="identifier">h</span> <span class="special">/=</span> <span class="number">2</span><span class="special">;</span> + + <span class="identifier">value_type</span> <span class="identifier">sum</span><span class="special">(</span><span class="number">0</span><span class="special">);</span> + <span class="keyword">for</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">j</span> <span class="special">=</span> <span class="number">1U</span><span class="special">;</span> <span class="identifier">j</span> <span class="special"><=</span> <span class="identifier">n</span><span class="special">;</span> <span class="identifier">j</span><span class="special">++)</span> + <span class="special">{</span> + <span class="identifier">sum</span> <span class="special">+=</span> <span class="identifier">func</span><span class="special">(</span><span class="identifier">a</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">value_type</span><span class="special">((</span><span class="identifier">j</span> <span class="special">*</span> <span class="number">2</span><span class="special">)</span> <span class="special">-</span> <span class="number">1</span><span class="special">)</span> <span class="special">*</span> <span class="identifier">h</span><span class="special">));</span> + <span class="special">}</span> + + <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">I0</span> <span class="special">=</span> <span class="identifier">I</span><span class="special">;</span> + <span class="identifier">I</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">I</span> <span class="special">/</span> <span class="number">2</span><span class="special">)</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">h</span> <span class="special">*</span> <span class="identifier">sum</span><span class="special">);</span> + + <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">ratio</span> <span class="special">=</span> <span class="identifier">I0</span> <span class="special">/</span> <span class="identifier">I</span><span class="special">;</span> + <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">delta</span> <span class="special">=</span> <span class="identifier">ratio</span> <span class="special">-</span> <span class="number">1</span><span class="special">;</span> + <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">delta_abs</span> <span class="special">=</span> <span class="special">((</span><span class="identifier">delta</span> <span class="special"><</span> <span class="number">0</span><span class="special">)</span> <span class="special">?</span> <span class="special">-</span><span class="identifier">delta</span> <span class="special">:</span> <span class="identifier">delta</span><span class="special">);</span> + + <span class="keyword">if</span><span class="special">((</span><span class="identifier">k</span> <span class="special">></span> <span class="number">1U</span><span class="special">)</span> <span class="special">&&</span> <span class="special">(</span><span class="identifier">delta_abs</span> <span class="special"><</span> <span class="identifier">tol</span><span class="special">))</span> + <span class="special">{</span> + <span class="keyword">break</span><span class="special">;</span> + <span class="special">}</span> + + <span class="identifier">n</span> <span class="special">*=</span> <span class="number">2U</span><span class="special">;</span> + <span class="special">}</span> + + <span class="keyword">return</span> <span class="identifier">I</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + The following sample program shows how the function can be called, we + begin by defining a function object, which when integrated should yield + the Bessel J function: + </p> +<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">value_type</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">cyl_bessel_j_integral_rep</span> +<span class="special">{</span> +<span class="keyword">public</span><span class="special">:</span> + <span class="identifier">cyl_bessel_j_integral_rep</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">unsigned</span> <span class="identifier">N</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">&</span> <span class="identifier">X</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">n</span><span class="special">(</span><span class="identifier">N</span><span class="special">),</span> <span class="identifier">x</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span> <span class="special">{</span> <span class="special">}</span> + + <span class="identifier">value_type</span> <span class="keyword">operator</span><span class="special">()(</span><span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">&</span> <span class="identifier">t</span><span class="special">)</span> <span class="keyword">const</span> + <span class="special">{</span> + <span class="comment">// pi * Jn(x) = Int_0^pi [cos(x * sin(t) - n*t) dt]</span> + <span class="keyword">return</span> <span class="identifier">cos</span><span class="special">(</span><span class="identifier">x</span> <span class="special">*</span> <span class="identifier">sin</span><span class="special">(</span><span class="identifier">t</span><span class="special">)</span> <span class="special">-</span> <span class="special">(</span><span class="identifier">n</span> <span class="special">*</span> <span class="identifier">t</span><span class="special">));</span> + <span class="special">}</span> + +<span class="keyword">private</span><span class="special">:</span> + <span class="keyword">const</span> <span class="keyword">unsigned</span> <span class="identifier">n</span><span class="special">;</span> + <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">x</span><span class="special">;</span> +<span class="special">};</span> +</pre> +<pre class="programlisting"> <span class="comment">/* The function can now be called as follows: */</span> +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">char</span><span class="special">**)</span> +<span class="special">{</span> + <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> + <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">cpp_dec_float_50</span> <span class="identifier">mp_type</span><span class="special">;</span> + + <span class="keyword">const</span> <span class="keyword">float</span> <span class="identifier">j2_f</span> <span class="special">=</span> + <span class="identifier">integral</span><span class="special">(</span><span class="number">0.0F</span><span class="special">,</span> + <span class="identifier">pi</span><span class="special"><</span><span class="keyword">float</span><span class="special">>(),</span> + <span class="number">0.01F</span><span class="special">,</span> + <span class="identifier">cyl_bessel_j_integral_rep</span><span class="special"><</span><span class="keyword">float</span><span class="special">>(</span><span class="number">2U</span><span class="special">,</span> <span class="number">1.23F</span><span class="special">))</span> <span class="special">/</span> <span class="identifier">pi</span><span class="special"><</span><span class="keyword">float</span><span class="special">>();</span> + + <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">j2_d</span> <span class="special">=</span> + <span class="identifier">integral</span><span class="special">(</span><span class="number">0.0</span><span class="special">,</span> + <span class="identifier">pi</span><span class="special"><</span><span class="keyword">double</span><span class="special">>(),</span> + <span class="number">0.0001</span><span class="special">,</span> + <span class="identifier">cyl_bessel_j_integral_rep</span><span class="special"><</span><span class="keyword">double</span><span class="special">>(</span><span class="number">2U</span><span class="special">,</span> <span class="number">1.23</span><span class="special">))</span> <span class="special">/</span> <span class="identifier">pi</span><span class="special"><</span><span class="keyword">double</span><span class="special">>();</span> + + <span class="keyword">const</span> <span class="identifier">mp_type</span> <span class="identifier">j2_mp</span> <span class="special">=</span> + <span class="identifier">integral</span><span class="special">(</span><span class="identifier">mp_type</span><span class="special">(</span><span class="number">0</span><span class="special">),</span> + <span class="identifier">pi</span><span class="special"><</span><span class="identifier">mp_type</span><span class="special">>(),</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="number">1.0E-20</span><span class="special">),</span> + <span class="identifier">cyl_bessel_j_integral_rep</span><span class="special"><</span><span class="identifier">mp_type</span><span class="special">>(</span><span class="number">2U</span><span class="special">,</span> <span class="identifier">mp_type</span><span class="special">(</span><span class="number">123</span><span class="special">)</span> <span class="special">/</span> <span class="number">100</span><span class="special">))</span> <span class="special">/</span> <span class="identifier">pi</span><span class="special"><</span><span class="identifier">mp_type</span><span class="special">>();</span> + + <span class="comment">// 0.166369</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</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="keyword">float</span><span class="special">>::</span><span class="identifier">digits10</span><span class="special">)</span> + <span class="special"><<</span> <span class="identifier">j2_f</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + + <span class="comment">// 0.166369383786814</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</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="keyword">double</span><span class="special">>::</span><span class="identifier">digits10</span><span class="special">)</span> + <span class="special"><<</span> <span class="identifier">j2_d</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + + <span class="comment">// 0.16636938378681407351267852431513159437103348245333</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</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">mp_type</span><span class="special">>::</span><span class="identifier">digits10</span><span class="special">)</span> + <span class="special"><<</span> <span class="identifier">j2_mp</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + + <span class="comment">//</span> + <span class="comment">// Print true value for comparison:</span> + <span class="comment">// 0.166369383786814073512678524315131594371033482453329</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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">cyl_bessel_j</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="identifier">mp_type</span><span class="special">(</span><span class="number">123</span><span class="special">)</span> <span class="special">/</span> <span class="number">100</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="nd.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../fp_eg.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="poly_eg.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/jel.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/jel.html new file mode 100644 index 0000000000..ce943eed69 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/jel.html @@ -0,0 +1,215 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Defining a Special Function.</title> +<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../fp_eg.html" title="Examples"> +<link rel="prev" href="aos.html" title="Area of Circle"> +<link rel="next" href="nd.html" title="Calculating a Derivative"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="aos.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../fp_eg.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="nd.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="boost_multiprecision.tut.floats.fp_eg.jel"></a><a class="link" href="jel.html" title="Defining a Special Function.">Defining + a Special Function.</a> +</h5></div></div></div> +<p> + In this example we'll show several implementations of the <a href="http://mathworld.wolfram.com/LambdaFunction.html" target="_top">Jahnke + and Emden Lambda function</a>, each implementation a little more + sophisticated than the last. + </p> +<p> + The Jahnke-Emden Lambda function is defined by the equation: + </p> +<div class="blockquote"><blockquote class="blockquote"><p> + <span class="emphasis"><em>JahnkeEmden(v, z) = Γ(v+1) * J<sub>v</sub>(z) / (z / 2)<sup>v</sup></em></span> + </p></blockquote></div> +<p> + If we were to implement this at double precision using Boost.Math's facilities + for the Gamma and Bessel function calls it would look like this: + </p> +<pre class="programlisting"><span class="keyword">double</span> <span class="identifier">JEL1</span><span class="special">(</span><span class="keyword">double</span> <span class="identifier">v</span><span class="special">,</span> <span class="keyword">double</span> <span class="identifier">z</span><span class="special">)</span> +<span class="special">{</span> + <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tgamma</span><span class="special">(</span><span class="identifier">v</span> <span class="special">+</span> <span class="number">1</span><span class="special">)</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">cyl_bessel_j</span><span class="special">(</span><span class="identifier">v</span><span class="special">,</span> <span class="identifier">z</span><span class="special">)</span> <span class="special">/</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">pow</span><span class="special">(</span><span class="identifier">z</span> <span class="special">/</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">v</span><span class="special">);</span> +<span class="special">}</span> +</pre> +<p> + Calling this function as: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">scientific</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</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="keyword">double</span><span class="special">>::</span><span class="identifier">digits10</span><span class="special">);</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">JEL1</span><span class="special">(</span><span class="number">2.5</span><span class="special">,</span> <span class="number">0.5</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +</pre> +<p> + Yields the output: + </p> +<pre class="programlisting">9.822663964796047e-001</pre> +<p> + Now let's implement the function again, but this time using the multiprecision + type <code class="computeroutput"><span class="identifier">cpp_dec_float_50</span></code> + as the argument type: + </p> +<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">cpp_dec_float_50</span> + <span class="identifier">JEL2</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_dec_float_50</span> <span class="identifier">v</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_dec_float_50</span> <span class="identifier">z</span><span class="special">)</span> +<span class="special">{</span> + <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tgamma</span><span class="special">(</span><span class="identifier">v</span> <span class="special">+</span> <span class="number">1</span><span class="special">)</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">cyl_bessel_j</span><span class="special">(</span><span class="identifier">v</span><span class="special">,</span> <span class="identifier">z</span><span class="special">)</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">pow</span><span class="special">(</span><span class="identifier">z</span> <span class="special">/</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">v</span><span class="special">);</span> +<span class="special">}</span> +</pre> +<p> + The implementation is almost the same as before, but with one key difference + - we can no longer call <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pow</span></code>, + instead we must call the version inside the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span></code> + namespace. In point of fact, we could have omitted the namespace prefix + on the call to <code class="computeroutput"><span class="identifier">pow</span></code> since + the right overload would have been found via <a href="http://en.wikipedia.org/wiki/Argument-dependent_name_lookup" target="_top">argument + dependent lookup</a> in any case. + </p> +<p> + Note also that the first argument to <code class="computeroutput"><span class="identifier">pow</span></code> + along with the argument to <code class="computeroutput"><span class="identifier">tgamma</span></code> + in the above code are actually expression templates. The <code class="computeroutput"><span class="identifier">pow</span></code> and <code class="computeroutput"><span class="identifier">tgamma</span></code> + functions will handle these arguments just fine. + </p> +<p> + Here's an example of how the function may be called: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">scientific</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</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_dec_float_50</span><span class="special">>::</span><span class="identifier">digits10</span><span class="special">);</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">JEL2</span><span class="special">(</span><span class="identifier">cpp_dec_float_50</span><span class="special">(</span><span class="number">2.5</span><span class="special">),</span> <span class="identifier">cpp_dec_float_50</span><span class="special">(</span><span class="number">0.5</span><span class="special">))</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +</pre> +<p> + Which outputs: + </p> +<pre class="programlisting">9.82266396479604757017335009796882833995903762577173e-01</pre> +<p> + Now that we've seen some non-template examples, lets repeat the code + again, but this time as a template that can be called either with a builtin + type (<code class="computeroutput"><span class="keyword">float</span></code>, <code class="computeroutput"><span class="keyword">double</span></code> etc), or with a multiprecision + type: + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Float</span><span class="special">></span> +<span class="identifier">Float</span> <span class="identifier">JEL3</span><span class="special">(</span><span class="identifier">Float</span> <span class="identifier">v</span><span class="special">,</span> <span class="identifier">Float</span> <span class="identifier">z</span><span class="special">)</span> +<span class="special">{</span> + <span class="keyword">using</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">pow</span><span class="special">;</span> + <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tgamma</span><span class="special">(</span><span class="identifier">v</span> <span class="special">+</span> <span class="number">1</span><span class="special">)</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">cyl_bessel_j</span><span class="special">(</span><span class="identifier">v</span><span class="special">,</span> <span class="identifier">z</span><span class="special">)</span> <span class="special">/</span> <span class="identifier">pow</span><span class="special">(</span><span class="identifier">z</span> <span class="special">/</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">v</span><span class="special">);</span> +<span class="special">}</span> +</pre> +<p> + Once again the code is almost the same as before, but the call to <code class="computeroutput"><span class="identifier">pow</span></code> has changed yet again. We need + the call to resolve to either <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pow</span></code> + (when the argument is a builtin type), or to <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">pow</span></code> + (when the argument is a multiprecision type). We do that by making the + call unqualified so that versions of <code class="computeroutput"><span class="identifier">pow</span></code> + defined in the same namespace as type <code class="computeroutput"><span class="identifier">Float</span></code> + are found via argument dependent lookup, while the <code class="computeroutput"><span class="keyword">using</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">pow</span></code> directive makes the standard library + versions visible for builtin floating point types. + </p> +<p> + Let's call the function with both <code class="computeroutput"><span class="keyword">double</span></code> + and multiprecision arguments: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">scientific</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</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="keyword">double</span><span class="special">>::</span><span class="identifier">digits10</span><span class="special">);</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">JEL3</span><span class="special">(</span><span class="number">2.5</span><span class="special">,</span> <span class="number">0.5</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">scientific</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</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_dec_float_50</span><span class="special">>::</span><span class="identifier">digits10</span><span class="special">);</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">JEL3</span><span class="special">(</span><span class="identifier">cpp_dec_float_50</span><span class="special">(</span><span class="number">2.5</span><span class="special">),</span> <span class="identifier">cpp_dec_float_50</span><span class="special">(</span><span class="number">0.5</span><span class="special">))</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +</pre> +<p> + Which outputs: + </p> +<pre class="programlisting">9.822663964796047e-001 +9.82266396479604757017335009796882833995903762577173e-01 +</pre> +<p> + Unfortunately there is a problem with this version: if we were to call + it like this: + </p> +<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">cpp_dec_float_50</span> <span class="identifier">v</span><span class="special">(</span><span class="number">2</span><span class="special">),</span> <span class="identifier">z</span><span class="special">(</span><span class="number">0.5</span><span class="special">);</span> +<span class="identifier">JEL3</span><span class="special">(</span><span class="identifier">v</span> <span class="special">+</span> <span class="number">0.5</span><span class="special">,</span> <span class="identifier">z</span><span class="special">);</span> +</pre> +<p> + Then we would get a long and inscrutable error message from the compiler: + the problem here is that the first argument to <code class="computeroutput"><span class="identifier">JEL3</span></code> + is not a number type, but an expression template. We could obviously + add a typecast to fix the issue: + </p> +<pre class="programlisting"><span class="identifier">JEL</span><span class="special">(</span><span class="identifier">cpp_dec_float_50</span><span class="special">(</span><span class="identifier">v</span> <span class="special">+</span> <span class="number">0.5</span><span class="special">),</span> <span class="identifier">z</span><span class="special">);</span> +</pre> +<p> + However, if we want the function JEL to be truly reusable, then a better + solution might be preferred. To achieve this we can borrow some code + from Boost.Math which calculates the return type of mixed-argument functions, + here's how the new code looks now: + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Float1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Float2</span><span class="special">></span> +<span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">promote_args</span><span class="special"><</span><span class="identifier">Float1</span><span class="special">,</span> <span class="identifier">Float2</span><span class="special">>::</span><span class="identifier">type</span> + <span class="identifier">JEL4</span><span class="special">(</span><span class="identifier">Float1</span> <span class="identifier">v</span><span class="special">,</span> <span class="identifier">Float2</span> <span class="identifier">z</span><span class="special">)</span> +<span class="special">{</span> + <span class="keyword">using</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">pow</span><span class="special">;</span> + <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tgamma</span><span class="special">(</span><span class="identifier">v</span> <span class="special">+</span> <span class="number">1</span><span class="special">)</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">cyl_bessel_j</span><span class="special">(</span><span class="identifier">v</span><span class="special">,</span> <span class="identifier">z</span><span class="special">)</span> <span class="special">/</span> <span class="identifier">pow</span><span class="special">(</span><span class="identifier">z</span> <span class="special">/</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">v</span><span class="special">);</span> +<span class="special">}</span> +</pre> +<p> + As you can see the two arguments to the function are now separate template + types, and the return type is computed using the <code class="computeroutput"><span class="identifier">promote_args</span></code> + metafunction from Boost.Math. + </p> +<p> + Now we can call: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">scientific</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</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_dec_float_100</span><span class="special">>::</span><span class="identifier">digits10</span><span class="special">);</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">JEL4</span><span class="special">(</span><span class="identifier">cpp_dec_float_100</span><span class="special">(</span><span class="number">2</span><span class="special">)</span> <span class="special">+</span> <span class="number">0.5</span><span class="special">,</span> <span class="identifier">cpp_dec_float_100</span><span class="special">(</span><span class="number">0.5</span><span class="special">))</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +</pre> +<p> + And get 100 digits of output: + </p> +<pre class="programlisting">9.8226639647960475701733500979688283399590376257717309069410413822165082248153638454147004236848917775e-01</pre> +<p> + As a bonus, we can now call the function not just with expression templates, + but with other mixed types as well: for example <code class="computeroutput"><span class="keyword">float</span></code> + and <code class="computeroutput"><span class="keyword">double</span></code> or <code class="computeroutput"><span class="keyword">int</span></code> and <code class="computeroutput"><span class="keyword">double</span></code>, + and the correct return type will be computed in each case. + </p> +<p> + Note that while in this case we didn't have to change the body of the + function, in the general case any function like this which creates local + variables internally would have to use <code class="computeroutput"><span class="identifier">promote_args</span></code> + to work out what type those variables should be, for example: + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Float1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Float2</span><span class="special">></span> +<span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">promote_args</span><span class="special"><</span><span class="identifier">Float1</span><span class="special">,</span> <span class="identifier">Float2</span><span class="special">>::</span><span class="identifier">type</span> + <span class="identifier">JEL5</span><span class="special">(</span><span class="identifier">Float1</span> <span class="identifier">v</span><span class="special">,</span> <span class="identifier">Float2</span> <span class="identifier">z</span><span class="special">)</span> +<span class="special">{</span> + <span class="keyword">using</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">pow</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tools</span><span class="special">::</span><span class="identifier">promote_args</span><span class="special"><</span><span class="identifier">Float1</span><span class="special">,</span> <span class="identifier">Float2</span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">variable_type</span><span class="special">;</span> + <span class="identifier">variable_type</span> <span class="identifier">t</span> <span class="special">=</span> <span class="identifier">pow</span><span class="special">(</span><span class="identifier">z</span> <span class="special">/</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">v</span><span class="special">);</span> + <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">tgamma</span><span class="special">(</span><span class="identifier">v</span> <span class="special">+</span> <span class="number">1</span><span class="special">)</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">cyl_bessel_j</span><span class="special">(</span><span class="identifier">v</span><span class="special">,</span> <span class="identifier">z</span><span class="special">)</span> <span class="special">/</span> <span class="identifier">t</span><span class="special">;</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="aos.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../fp_eg.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="nd.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/nd.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/nd.html new file mode 100644 index 0000000000..373dc97e74 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/nd.html @@ -0,0 +1,199 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Calculating a Derivative</title> +<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../fp_eg.html" title="Examples"> +<link rel="prev" href="jel.html" title="Defining a Special Function."> +<link rel="next" href="gi.html" title="Calculating an Integral"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="jel.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../fp_eg.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="gi.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="boost_multiprecision.tut.floats.fp_eg.nd"></a><a class="link" href="nd.html" title="Calculating a Derivative">Calculating + a Derivative</a> +</h5></div></div></div> +<p> + In this example we'll add even more power to generic numeric programming + using not only different floating-point types but also function objects + as template parameters. Consider some well-known central difference rules + for numerically computing the first derivative of a function <span class="emphasis"><em>f′(x)</em></span> + with <span class="emphasis"><em>x ∈ ℜ</em></span>: + </p> +<p> + <span class="inlinemediaobject"><img src="../../../../../floating_point_eg1.png"></span> + </p> +<p> + Where the difference terms <span class="emphasis"><em>m<sub>n</sub></em></span> are given by: + </p> +<p> + <span class="inlinemediaobject"><img src="../../../../../floating_point_eg2.png"></span> + </p> +<p> + and <span class="emphasis"><em>dx</em></span> is the step-size of the derivative. + </p> +<p> + The third formula in Equation 1 is a three-point central difference rule. + It calculates the first derivative of <span class="emphasis"><em>f′(x)</em></span> to <span class="emphasis"><em>O(dx<sup>6</sup>)</em></span>, + where <span class="emphasis"><em>dx</em></span> is the given step-size. For example, if + the step-size is 0.01 this derivative calculation has about 6 decimal + digits of precision - just about right for the 7 decimal digits of single-precision + float. Let's make a generic template subroutine using this three-point + central difference rule. In particular: + </p> +<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">value_type</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">function_type</span><span class="special">></span> + <span class="identifier">value_type</span> <span class="identifier">derivative</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">x</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">dx</span><span class="special">,</span> <span class="identifier">function_type</span> <span class="identifier">func</span><span class="special">)</span> +<span class="special">{</span> + <span class="comment">// Compute d/dx[func(*first)] using a three-point</span> + <span class="comment">// central difference rule of O(dx^6).</span> + + <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">dx1</span> <span class="special">=</span> <span class="identifier">dx</span><span class="special">;</span> + <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">dx2</span> <span class="special">=</span> <span class="identifier">dx1</span> <span class="special">*</span> <span class="number">2</span><span class="special">;</span> + <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">dx3</span> <span class="special">=</span> <span class="identifier">dx1</span> <span class="special">*</span> <span class="number">3</span><span class="special">;</span> + + <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">m1</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">func</span><span class="special">(</span><span class="identifier">x</span> <span class="special">+</span> <span class="identifier">dx1</span><span class="special">)</span> <span class="special">-</span> <span class="identifier">func</span><span class="special">(</span><span class="identifier">x</span> <span class="special">-</span> <span class="identifier">dx1</span><span class="special">))</span> <span class="special">/</span> <span class="number">2</span><span class="special">;</span> + <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">m2</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">func</span><span class="special">(</span><span class="identifier">x</span> <span class="special">+</span> <span class="identifier">dx2</span><span class="special">)</span> <span class="special">-</span> <span class="identifier">func</span><span class="special">(</span><span class="identifier">x</span> <span class="special">-</span> <span class="identifier">dx2</span><span class="special">))</span> <span class="special">/</span> <span class="number">4</span><span class="special">;</span> + <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">m3</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">func</span><span class="special">(</span><span class="identifier">x</span> <span class="special">+</span> <span class="identifier">dx3</span><span class="special">)</span> <span class="special">-</span> <span class="identifier">func</span><span class="special">(</span><span class="identifier">x</span> <span class="special">-</span> <span class="identifier">dx3</span><span class="special">))</span> <span class="special">/</span> <span class="number">6</span><span class="special">;</span> + + <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">fifteen_m1</span> <span class="special">=</span> <span class="number">15</span> <span class="special">*</span> <span class="identifier">m1</span><span class="special">;</span> + <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">six_m2</span> <span class="special">=</span> <span class="number">6</span> <span class="special">*</span> <span class="identifier">m2</span><span class="special">;</span> + <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">ten_dx1</span> <span class="special">=</span> <span class="number">10</span> <span class="special">*</span> <span class="identifier">dx1</span><span class="special">;</span> + + <span class="keyword">return</span> <span class="special">((</span><span class="identifier">fifteen_m1</span> <span class="special">-</span> <span class="identifier">six_m2</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">m3</span><span class="special">)</span> <span class="special">/</span> <span class="identifier">ten_dx1</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + The <code class="computeroutput"><span class="identifier">derivative</span><span class="special">()</span></code> + template function can be used to compute the first derivative of any + function to <span class="emphasis"><em>O(dx<sup>6</sup>)</em></span>. For example, consider the first + derivative of <span class="emphasis"><em>sin(x)</em></span> evaluated at <span class="emphasis"><em>x = + π/3</em></span>. In other words, + </p> +<p> + <span class="inlinemediaobject"><img src="../../../../../floating_point_eg3.png"></span> + </p> +<p> + The code below computes the derivative in Equation 3 for float, double + and boost's multiple-precision type cpp_dec_float_50. + </p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iomanip</span><span class="special">></span> +<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_dec_float</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<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> + + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">char</span><span class="special">**)</span> +<span class="special">{</span> + <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> + <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_dec_float_50</span><span class="special">;</span> + <span class="comment">//</span> + <span class="comment">// We'll pass a function pointer for the function object passed to derivative,</span> + <span class="comment">// the typecast is needed to select the correct overload of std::sin:</span> + <span class="comment">//</span> + <span class="keyword">const</span> <span class="keyword">float</span> <span class="identifier">d_f</span> <span class="special">=</span> <span class="identifier">derivative</span><span class="special">(</span> + <span class="identifier">pi</span><span class="special"><</span><span class="keyword">float</span><span class="special">>()</span> <span class="special">/</span> <span class="number">3</span><span class="special">,</span> + <span class="number">0.01F</span><span class="special">,</span> + <span class="keyword">static_cast</span><span class="special"><</span><span class="keyword">float</span><span class="special">(*)(</span><span class="keyword">float</span><span class="special">)>(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">sin</span><span class="special">)</span> + <span class="special">);</span> + + <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">d_d</span> <span class="special">=</span> <span class="identifier">derivative</span><span class="special">(</span> + <span class="identifier">pi</span><span class="special"><</span><span class="keyword">double</span><span class="special">>()</span> <span class="special">/</span> <span class="number">3</span><span class="special">,</span> + <span class="number">0.001</span><span class="special">,</span> + <span class="keyword">static_cast</span><span class="special"><</span><span class="keyword">double</span><span class="special">(*)(</span><span class="keyword">double</span><span class="special">)>(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">sin</span><span class="special">)</span> + <span class="special">);</span> + <span class="comment">//</span> + <span class="comment">// In the cpp_dec_float_50 case, the sin function is multiply overloaded</span> + <span class="comment">// to handle expression templates etc. As a result it's hard to take its</span> + <span class="comment">// address without knowing about its implementation details. We'll use a </span> + <span class="comment">// C++11 lambda expression to capture the call.</span> + <span class="comment">// We also need a typecast on the first argument so we don't accidentally pass</span> + <span class="comment">// an expression template to a template function:</span> + <span class="comment">//</span> + <span class="keyword">const</span> <span class="identifier">cpp_dec_float_50</span> <span class="identifier">d_mp</span> <span class="special">=</span> <span class="identifier">derivative</span><span class="special">(</span> + <span class="identifier">cpp_dec_float_50</span><span class="special">(</span><span class="identifier">pi</span><span class="special"><</span><span class="identifier">cpp_dec_float_50</span><span class="special">>()</span> <span class="special">/</span> <span class="number">3</span><span class="special">),</span> + <span class="identifier">cpp_dec_float_50</span><span class="special">(</span><span class="number">1.0E-9</span><span class="special">),</span> + <span class="special">[](</span><span class="keyword">const</span> <span class="identifier">cpp_dec_float_50</span><span class="special">&</span> <span class="identifier">x</span><span class="special">)</span> <span class="special">-></span> <span class="identifier">cpp_dec_float_50</span> + <span class="special">{</span> + <span class="keyword">return</span> <span class="identifier">sin</span><span class="special">(</span><span class="identifier">x</span><span class="special">);</span> + <span class="special">}</span> + <span class="special">);</span> + + <span class="comment">// 5.000029e-001</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</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="keyword">float</span><span class="special">>::</span><span class="identifier">digits10</span><span class="special">)</span> + <span class="special"><<</span> <span class="identifier">d_f</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + + <span class="comment">// 4.999999999998876e-001</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</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="keyword">double</span><span class="special">>::</span><span class="identifier">digits10</span><span class="special">)</span> + <span class="special"><<</span> <span class="identifier">d_d</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + + <span class="comment">// 4.99999999999999999999999999999999999999999999999999e-01</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</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_dec_float_50</span><span class="special">>::</span><span class="identifier">digits10</span><span class="special">)</span> + <span class="special"><<</span> <span class="identifier">d_mp</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + The expected value of the derivative is 0.5. This central difference + rule in this example is ill-conditioned, meaning it suffers from slight + loss of precision. With that in mind, the results agree with the expected + value of 0.5. + </p> +<p> + We can take this a step further and use our derivative function to compute + a partial derivative. For example if we take the incomplete gamma function + <span class="emphasis"><em>P(a, z)</em></span>, and take the derivative with respect to + <span class="emphasis"><em>z</em></span> at <span class="emphasis"><em>(2,2)</em></span> then we can calculate + the result as shown below, for good measure we'll compare with the "correct" + result obtained from a call to <span class="emphasis"><em>gamma_p_derivative</em></span>, + the results agree to approximately 44 digits: + </p> +<pre class="programlisting"><span class="identifier">cpp_dec_float_50</span> <span class="identifier">gd</span> <span class="special">=</span> <span class="identifier">derivative</span><span class="special">(</span> + <span class="identifier">cpp_dec_float_50</span><span class="special">(</span><span class="number">2</span><span class="special">),</span> + <span class="identifier">cpp_dec_float_50</span><span class="special">(</span><span class="number">1.0E-9</span><span class="special">),</span> + <span class="special">[](</span><span class="keyword">const</span> <span class="identifier">cpp_dec_float_50</span><span class="special">&</span> <span class="identifier">x</span><span class="special">)</span> <span class="special">-></span><span class="identifier">cpp_dec_float_50</span> + <span class="special">{</span> + <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">gamma_p</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="identifier">x</span><span class="special">);</span> + <span class="special">}</span> +<span class="special">);</span> +<span class="comment">// 2.70670566473225383787998989944968806815263091819151e-01</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</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_dec_float_50</span><span class="special">>::</span><span class="identifier">digits10</span><span class="special">)</span> + <span class="special"><<</span> <span class="identifier">gd</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +<span class="comment">// 2.70670566473225383787998989944968806815253190143120e-01</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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">gamma_p_derivative</span><span class="special">(</span><span class="identifier">cpp_dec_float_50</span><span class="special">(</span><span class="number">2</span><span class="special">),</span> <span class="identifier">cpp_dec_float_50</span><span class="special">(</span><span class="number">2</span><span class="special">))</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="jel.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../fp_eg.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="gi.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/poly_eg.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/poly_eg.html new file mode 100644 index 0000000000..fd8b5ca300 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/poly_eg.html @@ -0,0 +1,152 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Polynomial Evaluation</title> +<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../fp_eg.html" title="Examples"> +<link rel="prev" href="gi.html" title="Calculating an Integral"> +<link rel="next" href="../../interval.html" title="Interval Number Types"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="gi.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../fp_eg.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="../../interval.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="boost_multiprecision.tut.floats.fp_eg.poly_eg"></a><a class="link" href="poly_eg.html" title="Polynomial Evaluation">Polynomial + Evaluation</a> +</h5></div></div></div> +<p> + In this example we'll look at polynomial evaluation, this is not only + an important use case, but it's one that <code class="computeroutput"><span class="identifier">number</span></code> + performs particularly well at because the expression templates <span class="emphasis"><em>completely + eliminate all temporaries</em></span> from a <a href="http://en.wikipedia.org/wiki/Horner%27s_method" target="_top">Horner + polynomial evaluation scheme</a>. + </p> +<p> + The following code evaluates <code class="computeroutput"><span class="identifier">sin</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span></code> as a polynomial, accurate to at least + 64 decimal places: + </p> +<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_dec_float</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_dec_float</span><span class="special"><</span><span class="number">64</span><span class="special">></span> <span class="special">></span> <span class="identifier">mp_type</span><span class="special">;</span> + +<span class="identifier">mp_type</span> <span class="identifier">mysin</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">mp_type</span><span class="special">&</span> <span class="identifier">x</span><span class="special">)</span> +<span class="special">{</span> + <span class="comment">// Approximation of sin(x * pi/2) for -1 <= x <= 1, using an order 63 polynomial.</span> + <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">array</span><span class="special"><</span><span class="identifier">mp_type</span><span class="special">,</span> <span class="number">32U</span><span class="special">></span> <span class="identifier">coefs</span> <span class="special">=</span> + <span class="special">{{</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+1.5707963267948966192313216916397514420985846996875529104874722961539082031431044993140174126711"</span><span class="special">),</span> <span class="comment">//"),</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-0.64596409750624625365575656389794573337969351178927307696134454382929989411386887578263960484"</span><span class="special">),</span> <span class="comment">// ^3</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+0.07969262624616704512050554949047802252091164235106119545663865720995702920146198554317279"</span><span class="special">),</span> <span class="comment">// ^5</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-0.0046817541353186881006854639339534378594950280185010575749538605102665157913157426229824"</span><span class="special">),</span> <span class="comment">// ^7</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+0.00016044118478735982187266087016347332970280754062061156858775174056686380286868007443"</span><span class="special">),</span> <span class="comment">// ^9</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-3.598843235212085340458540018208389404888495232432127661083907575106196374913134E-6"</span><span class="special">),</span> <span class="comment">// ^11</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+5.692172921967926811775255303592184372902829756054598109818158853197797542565E-8"</span><span class="special">),</span> <span class="comment">// ^13</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-6.688035109811467232478226335783138689956270985704278659373558497256423498E-10"</span><span class="special">),</span> <span class="comment">// ^15</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+6.066935731106195667101445665327140070166203261129845646380005577490472E-12"</span><span class="special">),</span> <span class="comment">// ^17</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-4.377065467313742277184271313776319094862897030084226361576452003432E-14"</span><span class="special">),</span> <span class="comment">// ^19</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+2.571422892860473866153865950420487369167895373255729246889168337E-16"</span><span class="special">),</span> <span class="comment">// ^21</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-1.253899540535457665340073300390626396596970180355253776711660E-18"</span><span class="special">),</span> <span class="comment">// ^23</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+5.15645517658028233395375998562329055050964428219501277474E-21"</span><span class="special">),</span> <span class="comment">// ^25</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-1.812399312848887477410034071087545686586497030654642705E-23"</span><span class="special">),</span> <span class="comment">// ^27</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+5.50728578652238583570585513920522536675023562254864E-26"</span><span class="special">),</span> <span class="comment">// ^29</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-1.461148710664467988723468673933026649943084902958E-28"</span><span class="special">),</span> <span class="comment">// ^31</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+3.41405297003316172502972039913417222912445427E-31"</span><span class="special">),</span> <span class="comment">// ^33</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-7.07885550810745570069916712806856538290251E-34"</span><span class="special">),</span> <span class="comment">// ^35</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+1.31128947968267628970845439024155655665E-36"</span><span class="special">),</span> <span class="comment">// ^37</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-2.18318293181145698535113946654065918E-39"</span><span class="special">),</span> <span class="comment">// ^39</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+3.28462680978498856345937578502923E-42"</span><span class="special">),</span> <span class="comment">// ^41</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-4.48753699028101089490067137298E-45"</span><span class="special">),</span> <span class="comment">// ^43</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+5.59219884208696457859353716E-48"</span><span class="special">),</span> <span class="comment">// ^45</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-6.38214503973500471720565E-51"</span><span class="special">),</span> <span class="comment">// ^47</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+6.69528558381794452556E-54"</span><span class="special">),</span> <span class="comment">// ^49</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-6.47841373182350206E-57"</span><span class="special">),</span> <span class="comment">// ^51</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+5.800016389666445E-60"</span><span class="special">),</span> <span class="comment">// ^53</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-4.818507347289E-63"</span><span class="special">),</span> <span class="comment">// ^55</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+3.724683686E-66"</span><span class="special">),</span> <span class="comment">// ^57</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-2.6856479E-69"</span><span class="special">),</span> <span class="comment">// ^59</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+1.81046E-72"</span><span class="special">),</span> <span class="comment">// ^61</span> + <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-1.133E-75"</span><span class="special">),</span> <span class="comment">// ^63</span> + <span class="special">}};</span> + + <span class="keyword">const</span> <span class="identifier">mp_type</span> <span class="identifier">v</span> <span class="special">=</span> <span class="identifier">x</span> <span class="special">*</span> <span class="number">2</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">mp_type</span><span class="special">>();</span> + <span class="keyword">const</span> <span class="identifier">mp_type</span> <span class="identifier">x2</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">v</span> <span class="special">*</span> <span class="identifier">v</span><span class="special">);</span> + <span class="comment">//</span> + <span class="comment">// Polynomial evaluation follows, if mp_type allocates memory then</span> + <span class="comment">// just one such allocation occurs - to initialize the variable "sum" -</span> + <span class="comment">// and no temporaries are created at all.</span> + <span class="comment">//</span> + <span class="keyword">const</span> <span class="identifier">mp_type</span> <span class="identifier">sum</span> <span class="special">=</span> <span class="special">(((((((((((((((((((((((((((((((</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">31U</span><span class="special">]</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">30U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">29U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">28U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">27U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">26U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">25U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">24U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">23U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">22U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">21U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">20U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">19U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">18U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">17U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">16U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">15U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">14U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">13U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">12U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">11U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">10U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">9U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">8U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">7U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">6U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">5U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">4U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">3U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">2U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">1U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">0U</span><span class="special">])</span> + <span class="special">*</span> <span class="identifier">v</span><span class="special">;</span> + + <span class="keyword">return</span> <span class="identifier">sum</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + Calling the function like so: + </p> +<pre class="programlisting"><span class="identifier">mp_type</span> <span class="identifier">pid4</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">mp_type</span><span class="special">>()</span> <span class="special">/</span> <span class="number">4</span><span class="special">;</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</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="special">::</span><span class="identifier">mp_type</span><span class="special">>::</span><span class="identifier">digits10</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">scientific</span><span class="special">;</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">mysin</span><span class="special">(</span><span class="identifier">pid4</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +</pre> +<p> + Yields the expected output: + </p> +<pre class="programlisting">7.0710678118654752440084436210484903928483593768847403658833986900e-01</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="gi.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../fp_eg.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="../../interval.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/gmp_float.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/gmp_float.html new file mode 100644 index 0000000000..748ab6ff86 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/gmp_float.html @@ -0,0 +1,194 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>gmp_float</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../floats.html" title="Floating Point Numbers"> +<link rel="prev" href="cpp_dec_float.html" title="cpp_dec_float"> +<link rel="next" href="mpfr_float.html" title="mpfr_float"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="cpp_dec_float.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../floats.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="mpfr_float.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.floats.gmp_float"></a><a class="link" href="gmp_float.html" title="gmp_float">gmp_float</a> +</h4></div></div></div> +<p> + <code class="computeroutput"><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">gmp</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">gmp_float</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">gmp_float</span><span class="special"><</span><span class="number">50</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpf_float_50</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">gmp_float</span><span class="special"><</span><span class="number">100</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpf_float_100</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">gmp_float</span><span class="special"><</span><span class="number">500</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpf_float_500</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">gmp_float</span><span class="special"><</span><span class="number">1000</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpf_float_1000</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">gmp_float</span><span class="special"><</span><span class="number">0</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpf_float</span><span class="special">;</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> +</pre> +<p> + The <code class="computeroutput"><span class="identifier">gmp_float</span></code> back-end + is used in conjunction with <code class="computeroutput"><span class="identifier">number</span></code> + : it acts as a thin wrapper around the <a href="http://gmplib.org" target="_top">GMP</a> + <code class="computeroutput"><span class="identifier">mpf_t</span></code> to provide an real-number + type that is a drop-in replacement for the native C++ floating-point types, + but with much greater precision. + </p> +<p> + Type <code class="computeroutput"><span class="identifier">gmp_float</span></code> can be used + at fixed precision by specifying a non-zero <code class="computeroutput"><span class="identifier">Digits10</span></code> + template parameter, or at variable precision by setting the template argument + to zero. The typedefs mpf_float_50, mpf_float_100, mpf_float_500, mpf_float_1000 + provide arithmetic types at 50, 100, 500 and 1000 decimal digits precision + respectively. The typedef mpf_float provides a variable precision type + whose precision can be controlled via the <code class="computeroutput"><span class="identifier">number</span></code>s + member functions. + </p> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + This type only provides standard library and <code class="computeroutput"><span class="identifier">numeric_limits</span></code> + support when the precision is fixed at compile time. + </p></td></tr> +</table></div> +<p> + As well as the usual conversions from arithmetic and string types, instances + of <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">mpf_float</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span> <span class="special">></span></code> are copy constructible and assignable + from: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + The <a href="http://gmplib.org" target="_top">GMP</a> native types <code class="computeroutput"><span class="identifier">mpf_t</span></code>, <code class="computeroutput"><span class="identifier">mpz_t</span></code>, + <code class="computeroutput"><span class="identifier">mpq_t</span></code>. + </li> +<li class="listitem"> + The <code class="computeroutput"><span class="identifier">number</span></code> wrappers + around those types: <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">mpf_float</span><span class="special"><</span><span class="identifier">M</span><span class="special">></span> <span class="special">></span></code>, + <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">gmp_int</span><span class="special">></span></code>, + <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">gmp_rational</span><span class="special">></span></code>. + </li> +</ul></div> +<p> + It's also possible to access the underlying <code class="computeroutput"><span class="identifier">mpf_t</span></code> + via the <code class="computeroutput"><span class="identifier">data</span><span class="special">()</span></code> + member function of <code class="computeroutput"><span class="identifier">gmp_float</span></code>. + </p> +<p> + Things you should know when using this type: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + Default constructed <code class="computeroutput"><span class="identifier">gmp_float</span></code>s + have the value zero (this is the <a href="http://gmplib.org" target="_top">GMP</a> + library's default behavior). + </li> +<li class="listitem"> + No changes are made to the <a href="http://gmplib.org" target="_top">GMP</a> + library's global settings, so this type can be safely mixed with existing + <a href="http://gmplib.org" target="_top">GMP</a> code. + </li> +<li class="listitem"> + This backend supports rvalue-references and is move-aware, making instantiations + of <code class="computeroutput"><span class="identifier">number</span></code> on this backend + move aware. + </li> +<li class="listitem"> + It is not possible to round-trip objects of this type to and from a + string and get back exactly the same value. This appears to be a limitation + of <a href="http://gmplib.org" target="_top">GMP</a>. + </li> +<li class="listitem"> + Since the underlying <a href="http://gmplib.org" target="_top">GMP</a> types + have no notion of infinities or NaN's, care should be taken to avoid + numeric overflow or division by zero. That latter will result in a + std::overflow_error being thrown, while generating excessively large + exponents may result in instability of the underlying <a href="http://gmplib.org" target="_top">GMP</a> + library (in testing, converting a number with an excessively large + or small exponent to a string caused <a href="http://gmplib.org" target="_top">GMP</a> + to segfault). + </li> +<li class="listitem"> + This type can equally be used with <a href="http://mpir.org/" target="_top">MPIR</a> + as the underlying implementation - indeed that is the recommended option + on Win32. + </li> +<li class="listitem"> + Conversion from a string results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + being thrown if the string can not be interpreted as a valid floating + point number. + </li> +<li class="listitem"> + Division by zero results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> + being thrown. + </li> +</ul></div> +<h6> +<a name="boost_multiprecision.tut.floats.gmp_float.h0"></a> + <span class="phrase"><a name="boost_multiprecision.tut.floats.gmp_float.gmp_example"></a></span><a class="link" href="gmp_float.html#boost_multiprecision.tut.floats.gmp_float.gmp_example"> GMP example:</a> + </h6> +<pre class="programlisting"><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">gmp</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<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">special_functions</span><span class="special">/</span><span class="identifier">gamma</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> +<span class="special">{</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span> + + <span class="comment">// Operations at variable precision and limited standard library support:</span> + <span class="identifier">mpf_float</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span> + <span class="identifier">mpf_float</span><span class="special">::</span><span class="identifier">default_precision</span><span class="special">(</span><span class="number">1000</span><span class="special">);</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">mpf_float</span><span class="special">::</span><span class="identifier">default_precision</span><span class="special">()</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">sqrt</span><span class="special">(</span><span class="identifier">a</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// print root-2</span> + + <span class="comment">// Operations at fixed precision and full standard library support:</span> + <span class="identifier">mpf_float_100</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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">mpf_float_100</span><span class="special">>::</span><span class="identifier">digits</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="comment">// We can use any C++ std lib function:</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">log</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// print log(2)</span> + <span class="comment">// We can also use any function from Boost.Math:</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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">tgamma</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="comment">// These even work when the argument is an expression template:</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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">tgamma</span><span class="special">(</span><span class="identifier">b</span> <span class="special">*</span> <span class="identifier">b</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + + <span class="comment">// Access the underlying representation:</span> + <span class="identifier">mpf_t</span> <span class="identifier">f</span><span class="special">;</span> + <span class="identifier">mpf_init</span><span class="special">(</span><span class="identifier">f</span><span class="special">);</span> + <span class="identifier">mpf_set</span><span class="special">(</span><span class="identifier">f</span><span class="special">,</span> <span class="identifier">a</span><span class="special">.</span><span class="identifier">backend</span><span class="special">().</span><span class="identifier">data</span><span class="special">());</span> + <span class="identifier">mpf_clear</span><span class="special">(</span><span class="identifier">f</span><span class="special">);</span> + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="cpp_dec_float.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../floats.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="mpfr_float.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/mpfr_float.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/mpfr_float.html new file mode 100644 index 0000000000..3acd47f141 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/mpfr_float.html @@ -0,0 +1,283 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>mpfr_float</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../floats.html" title="Floating Point Numbers"> +<link rel="prev" href="gmp_float.html" title="gmp_float"> +<link rel="next" href="float128.html" title="float128"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="gmp_float.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../floats.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> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.floats.mpfr_float"></a><a class="link" href="mpfr_float.html" title="mpfr_float">mpfr_float</a> +</h4></div></div></div> +<p> + <code class="computeroutput"><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">mpfr</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">enum</span> <span class="identifier">mpfr_allocation_type</span> +<span class="special">{</span> + <span class="identifier">allocate_stack</span><span class="special">,</span> + <span class="identifier">allocate_dynamic</span> +<span class="special">};</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">,</span> <span class="identifier">mpfr_allocation_type</span> <span class="identifier">AllocateType</span> <span class="special">=</span> <span class="identifier">allocate_dynamic</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">mpfr_float_backend</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="number">50</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpfr_float_50</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="number">100</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpfr_float_100</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="number">500</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpfr_float_500</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="number">1000</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpfr_float_1000</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="number">0</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpfr_float</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="number">50</span><span class="special">,</span> <span class="identifier">allocate_stack</span><span class="special">></span> <span class="special">></span> <span class="identifier">static_mpfr_float_50</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="number">100</span><span class="special">,</span> <span class="identifier">allocate_stack</span><span class="special">></span> <span class="special">></span> <span class="identifier">static_mpfr_float_100</span><span class="special">;</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> +</pre> +<p> + The <code class="computeroutput"><span class="identifier">mpfr_float_backend</span></code> + type is used in conjunction with <code class="computeroutput"><span class="identifier">number</span></code>: + It acts as a thin wrapper around the <a href="http://www.mpfr.org" target="_top">MPFR</a> + <code class="computeroutput"><span class="identifier">mpfr_t</span></code> to provide an real-number + type that is a drop-in replacement for the native C++ floating-point types, + but with much greater precision. + </p> +<p> + Type <code class="computeroutput"><span class="identifier">mpfr_float_backend</span></code> + can be used at fixed precision by specifying a non-zero <code class="computeroutput"><span class="identifier">Digits10</span></code> + template parameter, or at variable precision by setting the template argument + to zero. The typedefs mpfr_float_50, mpfr_float_100, mpfr_float_500, mpfr_float_1000 + provide arithmetic types at 50, 100, 500 and 1000 decimal digits precision + respectively. The typedef mpfr_float provides a variable precision type + whose precision can be controlled via the <code class="computeroutput"><span class="identifier">number</span></code>s + member functions. + </p> +<p> + In addition the second template parameter lets you choose between dynamic + allocation (the default, and uses MPFR's normal allocation routines), or + stack allocation (where all the memory required for the underlying data + types is stored within <code class="computeroutput"><span class="identifier">mpfr_float_backend</span></code>). + The latter option can result in significantly faster code, at the expense + of growing the size of <code class="computeroutput"><span class="identifier">mpfr_float_backend</span></code>. + It can only be used at fixed precision, and should only be used for lower + digit counts. Note that we can not guarantee that using <code class="computeroutput"><span class="identifier">allocate_stack</span></code> + won't cause any calls to mpfr's allocation routines, as mpfr may call these + inside it's own code. The following table gives an idea of the performance + tradeoff's at 50 decimal digits precision<a href="#ftn.boost_multiprecision.tut.floats.mpfr_float.f0" class="footnote" name="boost_multiprecision.tut.floats.mpfr_float.f0"><sup class="footnote">[2]</sup></a>: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Type + </p> + </th> +<th> + <p> + Bessel function evaluation, relative times + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="number">50</span><span class="special">,</span> <span class="identifier">allocate_static</span><span class="special">>,</span> + <span class="identifier">et_on</span><span class="special">></span></code> + </p> + </td> +<td> + <p> + 1.0 (5.5s) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="number">50</span><span class="special">,</span> <span class="identifier">allocate_static</span><span class="special">>,</span> + <span class="identifier">et_off</span><span class="special">></span></code> + </p> + </td> +<td> + <p> + 1.05 (5.8s) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="number">50</span><span class="special">,</span> <span class="identifier">allocate_dynamic</span><span class="special">>,</span> + <span class="identifier">et_on</span><span class="special">></span></code> + </p> + </td> +<td> + <p> + 1.05 (5.8s) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="number">50</span><span class="special">,</span> <span class="identifier">allocate_dynamic</span><span class="special">>,</span> + <span class="identifier">et_off</span><span class="special">></span></code> + </p> + </td> +<td> + <p> + 1.16 (6.4s) + </p> + </td> +</tr> +</tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + This type only provides <code class="computeroutput"><span class="identifier">numeric_limits</span></code> + support when the precision is fixed at compile time. + </p></td></tr> +</table></div> +<p> + As well as the usual conversions from arithmetic and string types, instances + of <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span> <span class="special">></span></code> are copy constructible and assignable + from: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + The <a href="http://gmplib.org" target="_top">GMP</a> native types <code class="computeroutput"><span class="identifier">mpf_t</span></code>, <code class="computeroutput"><span class="identifier">mpz_t</span></code>, + <code class="computeroutput"><span class="identifier">mpq_t</span></code>. + </li> +<li class="listitem"> + The <a href="http://www.mpfr.org" target="_top">MPFR</a> native type <code class="computeroutput"><span class="identifier">mpfr_t</span></code>. + </li> +<li class="listitem"> + The <code class="computeroutput"><span class="identifier">number</span></code> wrappers + around those types: <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="identifier">M</span><span class="special">></span> <span class="special">></span></code>, + <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">mpf_float</span><span class="special"><</span><span class="identifier">M</span><span class="special">></span> <span class="special">></span></code>, <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">gmp_int</span><span class="special">></span></code>, <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">gmp_rational</span><span class="special">></span></code>. + </li> +</ul></div> +<p> + It's also possible to access the underlying <code class="computeroutput"><span class="identifier">mpfr_t</span></code> + via the data() member function of <code class="computeroutput"><span class="identifier">mpfr_float_backend</span></code>. + </p> +<p> + Things you should know when using this type: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + A default constructed <code class="computeroutput"><span class="identifier">mpfr_float_backend</span></code> + is set to a NaN (this is the default <a href="http://www.mpfr.org" target="_top">MPFR</a> + behavior). + </li> +<li class="listitem"> + All operations use round to nearest. + </li> +<li class="listitem"> + No changes are made to <a href="http://gmplib.org" target="_top">GMP</a> or + <a href="http://www.mpfr.org" target="_top">MPFR</a> global settings, so this + type can coexist with existing <a href="http://www.mpfr.org" target="_top">MPFR</a> + or <a href="http://gmplib.org" target="_top">GMP</a> code. + </li> +<li class="listitem"> + The code can equally use <a href="http://mpir.org/" target="_top">MPIR</a> + in place of <a href="http://gmplib.org" target="_top">GMP</a> - indeed that + is the preferred option on Win32. + </li> +<li class="listitem"> + This backend supports rvalue-references and is move-aware, making instantiations + of <code class="computeroutput"><span class="identifier">number</span></code> on this backend + move aware. + </li> +<li class="listitem"> + Conversion from a string results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + being thrown if the string can not be interpreted as a valid floating + point number. + </li> +<li class="listitem"> + Division by zero results in an infinity. + </li> +</ul></div> +<h6> +<a name="boost_multiprecision.tut.floats.mpfr_float.h0"></a> + <span class="phrase"><a name="boost_multiprecision.tut.floats.mpfr_float.mpfr_example"></a></span><a class="link" href="mpfr_float.html#boost_multiprecision.tut.floats.mpfr_float.mpfr_example"> MPFR example:</a> + </h6> +<pre class="programlisting"><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">mpfr</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<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">special_functions</span><span class="special">/</span><span class="identifier">gamma</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> +<span class="special">{</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span> + + <span class="comment">// Operations at variable precision and no numeric_limits support:</span> + <span class="identifier">mpfr_float</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span> + <span class="identifier">mpfr_float</span><span class="special">::</span><span class="identifier">default_precision</span><span class="special">(</span><span class="number">1000</span><span class="special">);</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">mpfr_float</span><span class="special">::</span><span class="identifier">default_precision</span><span class="special">()</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">sqrt</span><span class="special">(</span><span class="identifier">a</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// print root-2</span> + + <span class="comment">// Operations at fixed precision and full numeric_limits support:</span> + <span class="identifier">mpfr_float_100</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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">mpfr_float_100</span><span class="special">>::</span><span class="identifier">digits</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="comment">// We can use any C++ std lib function:</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">log</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// print log(2)</span> + <span class="comment">// We can also use any function from Boost.Math:</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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">tgamma</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="comment">// These even work when the argument is an expression template:</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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">tgamma</span><span class="special">(</span><span class="identifier">b</span> <span class="special">*</span> <span class="identifier">b</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + + <span class="comment">// Access the underlying data:</span> + <span class="identifier">mpfr_t</span> <span class="identifier">r</span><span class="special">;</span> + <span class="identifier">mpfr_init</span><span class="special">(</span><span class="identifier">r</span><span class="special">);</span> + <span class="identifier">mpfr_set</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">b</span><span class="special">.</span><span class="identifier">backend</span><span class="special">().</span><span class="identifier">data</span><span class="special">(),</span> <span class="identifier">GMP_RNDN</span><span class="special">);</span> + <span class="identifier">mpfr_clear</span><span class="special">(</span><span class="identifier">r</span><span class="special">);</span> + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<div class="footnotes"> +<br><hr style="width:100; text-align:left;margin-left: 0"> +<div id="ftn.boost_multiprecision.tut.floats.mpfr_float.f0" class="footnote"><p><a href="#boost_multiprecision.tut.floats.mpfr_float.f0" class="para"><sup class="para">[2] </sup></a> + Compiled with VC++10 and /Ox, with MPFR-3.0.0 and MPIR-2.3.0 + </p></div> +</div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="gmp_float.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../floats.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> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/gen_int.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/gen_int.html new file mode 100644 index 0000000000..75effaa47f --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/gen_int.html @@ -0,0 +1,180 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Generic Integer Operations</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../tut.html" title="Tutorial"> +<link rel="prev" href="mixed.html" title="Mixed Precision Arithmetic"> +<link rel="next" href="serial.html" title="Boost.Serialization Support"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="mixed.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="serial.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.tut.gen_int"></a><a class="link" href="gen_int.html" title="Generic Integer Operations">Generic Integer Operations</a> +</h3></div></div></div> +<p> + All of the <a class="link" href="../ref/number.html#boost_multiprecision.ref.number.integer_functions">non-member + integer operations</a> are overloaded for the built in integer types in + <code class="computeroutput"><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">integer</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>. + Where these operations require a temporary increase in precision (such as + for powm), then if no built in type is available, a <a class="link" href="ints/cpp_int.html" title="cpp_int">cpp_int</a> + of appropriate precision will be used. + </p> +<p> + Some of these functions are trivial, others use compiler intrinsics (where + available) to ensure optimal evaluation. + </p> +<p> + The overloaded functions are: + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">I2</span><span class="special">></span> +<span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">multiply</span><span class="special">(</span><span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">I2</span><span class="special">&</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">I2</span><span class="special">&</span> <span class="identifier">b</span><span class="special">);</span> +</pre> +<p> + Multiplies two <code class="computeroutput"><span class="identifier">I2</span></code> values, + to produce a wider <code class="computeroutput"><span class="identifier">Integer</span></code> + result. + </p> +<p> + Returns <code class="computeroutput"><span class="identifier">result</span> <span class="special">=</span> + <span class="identifier">a</span> <span class="special">*</span> <span class="identifier">b</span></code> without overflow or loss of precision + in the multiplication. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">I2</span><span class="special">></span> +<span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">add</span><span class="special">(</span><span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">I2</span><span class="special">&</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">I2</span><span class="special">&</span> <span class="identifier">b</span><span class="special">);</span> +</pre> +<p> + Adds two <code class="computeroutput"><span class="identifier">I2</span></code> values, to produce + a wider <code class="computeroutput"><span class="identifier">Integer</span></code> result. + </p> +<p> + Returns <code class="computeroutput"><span class="identifier">result</span> <span class="special">=</span> + <span class="identifier">a</span> <span class="special">+</span> <span class="identifier">b</span></code> without overflow or loss of precision + in the addition. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">I2</span><span class="special">></span> +<span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">subtract</span><span class="special">(</span><span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">I2</span><span class="special">&</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">I2</span><span class="special">&</span> <span class="identifier">b</span><span class="special">);</span> +</pre> +<p> + Subtracts two <code class="computeroutput"><span class="identifier">I2</span></code> values, + to produce a wider <code class="computeroutput"><span class="identifier">Integer</span></code> + result. + </p> +<p> + Returns <code class="computeroutput"><span class="identifier">result</span> <span class="special">=</span> + <span class="identifier">a</span> <span class="special">-</span> <span class="identifier">b</span></code> without overflow or loss of precision + in the subtraction. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">></span> +<span class="identifier">Integer</span> <span class="identifier">powm</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">b</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">p</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">m</span><span class="special">);</span> +</pre> +<p> + Returns b<sup>p</sup> % m. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">divide_qr</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">q</span><span class="special">,</span> <span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">r</span><span class="special">);</span> +</pre> +<p> + Sets <code class="computeroutput"><span class="identifier">q</span> <span class="special">=</span> + <span class="identifier">x</span> <span class="special">/</span> <span class="identifier">y</span></code> and <code class="computeroutput"><span class="identifier">r</span> + <span class="special">=</span> <span class="identifier">x</span> <span class="special">%</span> <span class="identifier">y</span></code>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Integer1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Integer2</span><span class="special">></span> +<span class="identifier">Integer2</span> <span class="identifier">integer_modulus</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Integer1</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">Integer2</span> <span class="identifier">val</span><span class="special">);</span> +</pre> +<p> + Returns x % val; + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">></span> +<span class="keyword">unsigned</span> <span class="identifier">lsb</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">x</span><span class="special">);</span> +</pre> +<p> + Returns the (zero-based) index of the least significant bit of <code class="computeroutput"><span class="identifier">x</span></code>. + </p> +<p> + Throws a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">domain_error</span></code> if <code class="computeroutput"><span class="identifier">x</span> + <span class="special"><=</span> <span class="number">0</span></code>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">></span> +<span class="keyword">unsigned</span> <span class="identifier">msb</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">x</span><span class="special">);</span> +</pre> +<p> + Returns the (zero-based) index of the most significant bit of <code class="computeroutput"><span class="identifier">x</span></code>. + </p> +<p> + Throws a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">domain_error</span></code> if <code class="computeroutput"><span class="identifier">x</span> + <span class="special"><=</span> <span class="number">0</span></code>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">bit_test</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span> +</pre> +<p> + Returns <code class="computeroutput"><span class="keyword">true</span></code> if bit <code class="computeroutput"><span class="identifier">index</span></code> is set in <code class="computeroutput"><span class="identifier">val</span></code>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">></span> +<span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">bit_set</span><span class="special">(</span><span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span> +</pre> +<p> + Sets the <code class="computeroutput"><span class="identifier">index</span></code> bit in <code class="computeroutput"><span class="identifier">val</span></code>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">></span> +<span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">bit_unset</span><span class="special">(</span><span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span> +</pre> +<p> + Unsets the <code class="computeroutput"><span class="identifier">index</span></code> bit in + <code class="computeroutput"><span class="identifier">val</span></code>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">></span> +<span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">bit_flip</span><span class="special">(</span><span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span> +</pre> +<p> + Flips the <code class="computeroutput"><span class="identifier">index</span></code> bit in <code class="computeroutput"><span class="identifier">val</span></code>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">></span> +<span class="identifier">Integer</span> <span class="identifier">sqrt</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">x</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">></span> +<span class="identifier">Integer</span> <span class="identifier">sqrt</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">Integer</span><span class="special">&</span> <span class="identifier">r</span><span class="special">);</span> +</pre> +<p> + Returns the integer square root <code class="computeroutput"><span class="identifier">s</span></code> + of x and sets <code class="computeroutput"><span class="identifier">r</span></code> to the remainder + <span class="emphasis"><em>x - s<sup>2</sup></em></span>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Engine</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">miller_rabin_test</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special">-</span><span class="keyword">or</span><span class="special">-</span><span class="identifier">expression</span><span class="special">-</span><span class="keyword">template</span><span class="special">-</span><span class="identifier">type</span><span class="special">&</span> <span class="identifier">n</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">trials</span><span class="special">,</span> <span class="identifier">Engine</span><span class="special">&</span> <span class="identifier">gen</span><span class="special">);</span> +<span class="keyword">bool</span> <span class="identifier">miller_rabin_test</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special">-</span><span class="keyword">or</span><span class="special">-</span><span class="identifier">expression</span><span class="special">-</span><span class="keyword">template</span><span class="special">-</span><span class="identifier">type</span><span class="special">&</span> <span class="identifier">n</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">trials</span><span class="special">);</span> +</pre> +<p> + The regular Miller-Rabin functions in <code class="computeroutput"><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">miller_rabin</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + are defined in terms of the above generic operations, and so function equally + well for built in and multiprecision types. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="mixed.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="serial.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/input_output.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/input_output.html new file mode 100644 index 0000000000..d58ffe908c --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/input_output.html @@ -0,0 +1,185 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Input Output</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../tut.html" title="Tutorial"> +<link rel="prev" href="limits/how_to_tell.html" title="How to Determine the Kind of a Number From std::numeric_limits"> +<link rel="next" href="../ref.html" title="Reference"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="limits/how_to_tell.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="../ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.tut.input_output"></a><a class="link" href="input_output.html" title="Input Output">Input Output</a> +</h3></div></div></div> +<h5> +<a name="boost_multiprecision.tut.input_output.h0"></a> + <span class="phrase"><a name="boost_multiprecision.tut.input_output.loopback_testing"></a></span><a class="link" href="input_output.html#boost_multiprecision.tut.input_output.loopback_testing">Loopback + testing</a> + </h5> +<p> + <span class="emphasis"><em>Loopback</em></span> or <span class="emphasis"><em>round-tripping</em></span> refers + to writing out a value as a decimal digit string using <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">iostream</span></code>, + usually to a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">stringstream</span></code>, and then reading the string + back in to another value, and confirming that the two values are identical. + A trivial example using <code class="computeroutput"><span class="keyword">float</span></code> + is: + </p> +<pre class="programlisting"><span class="keyword">float</span> <span class="identifier">write</span><span class="special">;</span> <span class="comment">// Value to round-trip.</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">stringstream</span> <span class="identifier">ss</span><span class="special">;</span> <span class="comment">// Read and write std::stringstream.</span> +<span class="identifier">ss</span><span class="special">.</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">T</span><span class="special">>::</span><span class="identifier">max_digits10</span><span class="special">);</span> <span class="comment">// Ensure all potentially significant bits are output.</span> +<span class="identifier">ss</span><span class="special">.</span><span class="identifier">flags</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">fmtflags</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">scientific</span><span class="special">));</span> <span class="comment">// Use scientific format.</span> +<span class="identifier">ss</span> <span class="special"><<</span> <span class="identifier">write</span><span class="special">;</span> <span class="comment">// Output to string.</span> +<span class="keyword">float</span> <span class="identifier">read</span><span class="special">;</span> <span class="comment">// Expected.</span> +<span class="identifier">ss</span> <span class="special">>></span> <span class="identifier">read</span><span class="special">;</span> <span class="comment">// Read decimal digits string from stringstream.</span> +<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="identifier">write</span><span class="special">,</span> <span class="identifier">read</span><span class="special">);</span> <span class="comment">// Should be the same.</span> +</pre> +<p> + and this can be run in a loop for all possible values of a 32-bit float. + For other floating-point types <code class="computeroutput"><span class="identifier">T</span></code>, + including built-in <code class="computeroutput"><span class="keyword">double</span></code>, it + takes far too long to test all values, so a reasonable test strategy is to + use a large number of random values. + </p> +<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">write</span><span class="special">;</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">stringstream</span> <span class="identifier">ss</span><span class="special">;</span> +<span class="identifier">ss</span><span class="special">.</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">T</span><span class="special">>::</span><span class="identifier">max_digits10</span><span class="special">);</span> <span class="comment">// Ensure all potentially significant bits are output.</span> +<span class="identifier">ss</span><span class="special">.</span><span class="identifier">flags</span><span class="special">(</span><span class="identifier">f</span><span class="special">);</span> <span class="comment">// Changed from default iostream format flags if desired.</span> +<span class="identifier">ss</span> <span class="special"><<</span> <span class="identifier">write</span><span class="special">;</span> <span class="comment">// Output to stringstream.</span> + +<span class="identifier">T</span> <span class="identifier">read</span><span class="special">;</span> +<span class="identifier">ss</span> <span class="special">>></span> <span class="identifier">read</span><span class="special">;</span> <span class="comment">// Get read using operator>> from stringstream.</span> +<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="identifier">read</span><span class="special">,</span> <span class="identifier">write</span><span class="special">);</span> + +<span class="identifier">read</span> <span class="special">=</span> <span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">T</span><span class="special">>(</span><span class="identifier">ss</span><span class="special">.</span><span class="identifier">str</span><span class="special">());</span> <span class="comment">// Get read by converting from decimal digits string representation of write.</span> +<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="identifier">read</span><span class="special">,</span> <span class="identifier">write</span><span class="special">);</span> + +<span class="identifier">read</span> <span class="special">=</span> <span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">T</span><span class="special">>(</span><span class="identifier">write</span><span class="special">.</span><span class="identifier">str</span><span class="special">(</span><span class="number">0</span><span class="special">,</span> <span class="identifier">f</span><span class="special">));</span> <span class="comment">// Get read using format specified when written.</span> +<span class="identifier">BOOST_CHECK_EQUAL</span><span class="special">(</span><span class="identifier">read</span><span class="special">,</span> <span class="identifier">write</span><span class="special">);</span> +</pre> +<p> + The test at <a href="../../../../test/test_cpp_bin_float_io.cpp" target="_top">test_cpp_bin_float_io.cpp</a> + allows any floating-point type to be <span class="emphasis"><em>round_tripped</em></span> using + a wide range of fairly random values. It also includes tests compared a collection + of <a href="../../../../test/string_data.ipp" target="_top">stringdata</a> test cases + in a file. + </p> +<h5> +<a name="boost_multiprecision.tut.input_output.h1"></a> + <span class="phrase"><a name="boost_multiprecision.tut.input_output.comparing_with_output_using_buil"></a></span><a class="link" href="input_output.html#boost_multiprecision.tut.input_output.comparing_with_output_using_buil">Comparing + with output using Built-in types</a> + </h5> +<p> + One can make some comparisons with the output of + </p> +<pre class="programlisting"><span class="special"><</span><span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_bin_float</span><span class="special"><</span><span class="number">53</span><span class="special">,</span> <span class="identifier">digit_count_2</span><span class="special">></span> <span class="special">></span> +</pre> +<p> + which has the same number of significant bits (53) as 64-bit double precision + floating-point. + </p> +<p> + However, although most outputs are identical, there are differences on some + platforms caused by the implementation-dependent behaviours allowed by the + C99 specification <a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf" target="_top">C99 + ISO/IEC 9899:TC2</a>, incorporated by C++. + </p> +<div class="blockquote"><blockquote class="blockquote"><p> + <span class="emphasis"><em>"For e, E, f, F, g, and G conversions, if the number of + significant decimal digits is at most DECIMAL_DIG, then the result should + be correctly rounded. If the number of significant decimal digits is more + than DECIMAL_DIG but the source value is exactly representable with DECIMAL_DIG + digits, then the result should be an exact representation with trailing + zeros. Otherwise, the source value is bounded by two adjacent decimal strings + L < U, both having DECIMAL_DIG significant digits; the value of the + resultant decimal string D should satisfy L<= D <= U, with the extra + stipulation that the error should have a correct sign for the current rounding + direction."</em></span> + </p></blockquote></div> +<p> + So not only is correct rounding for the full number of digits not required, + but even if the <span class="bold"><strong>optional</strong></span> recommended practice + is followed, then the value of these last few digits is unspecified as long + as the value is within certain bounds. + </p> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + Do not expect the output from different platforms to be <span class="bold"><strong>identical</strong></span>, + but <code class="computeroutput"><span class="identifier">cpp_dec_float</span></code>, <code class="computeroutput"><span class="identifier">cpp_bin_float</span></code> (and other backends) outputs + should be correctly rounded to the number of digits requested by the set + precision and format. + </p></td></tr> +</table></div> +<h5> +<a name="boost_multiprecision.tut.input_output.h2"></a> + <span class="phrase"><a name="boost_multiprecision.tut.input_output.macro_boost_mp_min_exponent_digi"></a></span><a class="link" href="input_output.html#boost_multiprecision.tut.input_output.macro_boost_mp_min_exponent_digi">Macro + BOOST_MP_MIN_EXPONENT_DIGITS</a> + </h5> +<p> + <a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf" target="_top">C99 + Standard</a> for format specifiers, 7.19.6 Formatted input/output functions + requires: + </p> +<p> + "The exponent always contains at least two digits, and only as many + more digits as necessary to represent the exponent." + </p> +<p> + So to conform to the C99 standard (incorporated by C++) + </p> +<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_MP_MIN_EXPONENT_DIGITS</span> <span class="number">2</span> +</pre> +<p> + Confusingly, Microsoft (and MinGW) do not conform to this standard and provide + <span class="bold"><strong>at least three digits</strong></span>, for example <code class="computeroutput"><span class="number">1e+001</span></code>. So if you want the output to match + that from built-in floating-point types on compilers that use Microsofts + runtime then use: + </p> +<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_MP_MIN_EXPONENT_DIGITS</span> <span class="number">3</span> +</pre> +<p> + Also useful to get the minimum exponent field width is + </p> +<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_MP_MIN_EXPONENT_DIGITS</span> <span class="number">1</span> +</pre> +<p> + producing a compact output like <code class="computeroutput"><span class="number">2e+4</span></code>, + useful when conserving space is important. + </p> +<p> + Larger values are also supported, for example, value 4 for <code class="computeroutput"><span class="number">2e+0004</span></code> which may be useful to ensure that + columns line up. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="limits/how_to_tell.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="../ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/interval.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/interval.html new file mode 100644 index 0000000000..8e38ca6072 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/interval.html @@ -0,0 +1,47 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Interval Number Types</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../tut.html" title="Tutorial"> +<link rel="prev" href="floats/fp_eg/poly_eg.html" title="Polynomial Evaluation"> +<link rel="next" href="interval/mpfi.html" title="mpfi_float"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="floats/fp_eg/poly_eg.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="interval/mpfi.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.tut.interval"></a><a class="link" href="interval.html" title="Interval Number Types">Interval Number Types</a> +</h3></div></div></div> +<div class="toc"><dl class="toc"><dt><span class="section"><a href="interval/mpfi.html">mpfi_float</a></span></dt></dl></div> +<p> + There is one currently only one interval number type supported - <a href="http://perso.ens-lyon.fr/nathalie.revol/software.html" target="_top">MPFI</a>. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="floats/fp_eg/poly_eg.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="interval/mpfi.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/interval/mpfi.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/interval/mpfi.html new file mode 100644 index 0000000000..fcd2aea9d3 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/interval/mpfi.html @@ -0,0 +1,286 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>mpfi_float</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../interval.html" title="Interval Number Types"> +<link rel="prev" href="../interval.html" title="Interval Number Types"> +<link rel="next" href="../rational.html" title="Rational Number Types"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../interval.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../interval.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="../rational.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.interval.mpfi"></a><a class="link" href="mpfi.html" title="mpfi_float">mpfi_float</a> +</h4></div></div></div> +<p> + <code class="computeroutput"><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">mpfi</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">mpfi_float_backend</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="number">50</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpfi_float_50</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="number">100</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpfifloat_100</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="number">500</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpfifloat_500</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="number">1000</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpfi_float_1000</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="number">0</span><span class="special">></span> <span class="special">></span> <span class="identifier">mpfi_float</span><span class="special">;</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> +</pre> +<p> + The <code class="computeroutput"><span class="identifier">mpfi_float_backend</span></code> + type is used in conjunction with <code class="computeroutput"><span class="identifier">number</span></code>: + It acts as a thin wrapper around the <a href="http://perso.ens-lyon.fr/nathalie.revol/software.html" target="_top">MPFI</a> + <code class="computeroutput"><span class="identifier">mpfi_t</span></code> to provide an real-number + type that is a drop-in replacement for the native C++ floating-point types, + but with much greater precision and implementing interval arithmetic. + </p> +<p> + Type <code class="computeroutput"><span class="identifier">mpfi_float_backend</span></code> + can be used at fixed precision by specifying a non-zero <code class="computeroutput"><span class="identifier">Digits10</span></code> + template parameter, or at variable precision by setting the template argument + to zero. The typedefs mpfi_float_50, mpfi_float_100, mpfi_float_500, mpfi_float_1000 + provide arithmetic types at 50, 100, 500 and 1000 decimal digits precision + respectively. The typedef mpfi_float provides a variable precision type + whose precision can be controlled via the <code class="computeroutput"><span class="identifier">number</span></code>s + member functions. + </p> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + This type only provides <code class="computeroutput"><span class="identifier">numeric_limits</span></code> + support when the precision is fixed at compile time. + </p></td></tr> +</table></div> +<p> + As well as the usual conversions from arithmetic and string types, instances + of <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span> <span class="special">></span></code> are copy constructible and assignable + from: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + The <a href="http://perso.ens-lyon.fr/nathalie.revol/software.html" target="_top">MPFI</a> + native type <code class="computeroutput"><span class="identifier">mpfi_t</span></code>. + </li> +<li class="listitem"> + The <code class="computeroutput"><span class="identifier">number</span></code> wrappers + around <a href="http://perso.ens-lyon.fr/nathalie.revol/software.html" target="_top">MPFI</a> + or <a href="http://www.mpfr.org" target="_top">MPFR</a>: <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">M</span><span class="special">></span> <span class="special">></span></code> + and <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float</span><span class="special"><</span><span class="identifier">M</span><span class="special">></span> <span class="special">></span></code>. + </li> +<li class="listitem"> + There is a two argument constructor taking two <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float</span><span class="special"><</span><span class="identifier">M</span><span class="special">></span> <span class="special">></span></code> + arguments specifying the interval. + </li> +</ul></div> +<p> + It's also possible to access the underlying <code class="computeroutput"><span class="identifier">mpfi_t</span></code> + via the data() member function of <code class="computeroutput"><span class="identifier">mpfi_float_backend</span></code>. + </p> +<p> + Things you should know when using this type: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + A default constructed <code class="computeroutput"><span class="identifier">mpfi_float_backend</span></code> + is set to a NaN (this is the default <a href="http://perso.ens-lyon.fr/nathalie.revol/software.html" target="_top">MPFI</a> + behavior). + </li> +<li class="listitem"> + No changes are made to <a href="http://gmplib.org" target="_top">GMP</a> or + <a href="http://www.mpfr.org" target="_top">MPFR</a> global settings, so this + type can coexist with existing <a href="http://www.mpfr.org" target="_top">MPFR</a> + or <a href="http://gmplib.org" target="_top">GMP</a> code. + </li> +<li class="listitem"> + The code can equally use <a href="http://mpir.org/" target="_top">MPIR</a> + in place of <a href="http://gmplib.org" target="_top">GMP</a> - indeed that + is the preferred option on Win32. + </li> +<li class="listitem"> + This backend supports rvalue-references and is move-aware, making instantiations + of <code class="computeroutput"><span class="identifier">number</span></code> on this backend + move aware. + </li> +<li class="listitem"> + Conversion from a string results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + being thrown if the string can not be interpreted as a valid floating + point number. + </li> +<li class="listitem"> + Division by zero results in an infinity. + </li> +</ul></div> +<p> + There are some additional non member functions for working on intervals: + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> <span class="identifier">lower</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">val</span><span class="special">);</span> +</pre> +<p> + Returns the lower end of the interval. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> <span class="identifier">upper</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">val</span><span class="special">);</span> +</pre> +<p> + Returns the upper end of the interval. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> <span class="identifier">median</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">val</span><span class="special">);</span> +</pre> +<p> + Returns the mid point of the interval. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> <span class="identifier">width</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">val</span><span class="special">);</span> +</pre> +<p> + Returns the absolute width of the interval. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> <span class="identifier">intersect</span><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">a</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">b</span><span class="special">);</span> +</pre> +<p> + Returns the interval which is the intersection of the <span class="emphasis"><em>a</em></span> + and <span class="emphasis"><em>b</em></span>. Returns an unspecified empty interval if there + is no such intersection. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> <span class="identifier">hull</span><span class="special">(</span> + <span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">a</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">b</span><span class="special">);</span> +</pre> +<p> + Returns the interval which is the union of <span class="emphasis"><em>a</em></span> and + <span class="emphasis"><em>b</em></span>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">overlap</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">a</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">b</span><span class="special">);</span> +</pre> +<p> + Returns <code class="computeroutput"><span class="keyword">true</span></code> only if the intervals + <span class="emphasis"><em>a</em></span> and <span class="emphasis"><em>b</em></span> overlap. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates1</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates2</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">in</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates1</span><span class="special">>&</span> <span class="identifier">a</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates2</span><span class="special">>&</span> <span class="identifier">b</span><span class="special">);</span> +</pre> +<p> + Returns <code class="computeroutput"><span class="keyword">true</span></code> only if point + <span class="emphasis"><em>a</em></span> is contained within the interval <span class="emphasis"><em>b</em></span>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">zero_in</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">a</span><span class="special">);</span> +</pre> +<p> + Returns <code class="computeroutput"><span class="keyword">true</span></code> only if the interval + <span class="emphasis"><em>a</em></span> contains the value zero. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">subset</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">a</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">b</span><span class="special">);</span> +</pre> +<p> + Returns <code class="computeroutput"><span class="keyword">true</span></code> only if <span class="emphasis"><em>a</em></span> + is a subset of <span class="emphasis"><em>b</em></span>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">proper_subset</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">a</span><span class="special">,</span> + <span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">b</span><span class="special">);</span> +</pre> +<p> + Returns <code class="computeroutput"><span class="keyword">true</span></code> only if <span class="emphasis"><em>a</em></span> + is a proper subset of <span class="emphasis"><em>b</em></span>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">empty</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">a</span><span class="special">);</span> +</pre> +<p> + Returns <code class="computeroutput"><span class="keyword">true</span></code> only if <span class="emphasis"><em>a</em></span> + is an empty interval, equivalent to <code class="computeroutput"><span class="identifier">upper</span><span class="special">(</span><span class="identifier">a</span><span class="special">)</span> + <span class="special"><</span> <span class="identifier">lower</span><span class="special">(</span><span class="identifier">a</span><span class="special">)</span></code>. + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">singleton</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">Digits10</span><span class="special">>,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">a</span><span class="special">);</span> +</pre> +<p> + Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">lower</span><span class="special">(</span><span class="identifier">a</span><span class="special">)</span> <span class="special">==</span> + <span class="identifier">upper</span><span class="special">(</span><span class="identifier">a</span><span class="special">)</span></code>. + </p> +<h6> +<a name="boost_multiprecision.tut.interval.mpfi.h0"></a> + <span class="phrase"><a name="boost_multiprecision.tut.interval.mpfi.mpfi_example"></a></span><a class="link" href="mpfi.html#boost_multiprecision.tut.interval.mpfi.mpfi_example"> MPFI + example:</a> + </h6> +<pre class="programlisting"><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">mpfi</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<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">special_functions</span><span class="special">/</span><span class="identifier">gamma</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> +<span class="special">{</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span> + + <span class="comment">// Operations at variable precision and no numeric_limits support:</span> + <span class="identifier">mpfi_float</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span> + <span class="identifier">mpfi_float</span><span class="special">::</span><span class="identifier">default_precision</span><span class="special">(</span><span class="number">1000</span><span class="special">);</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">mpfi_float</span><span class="special">::</span><span class="identifier">default_precision</span><span class="special">()</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">sqrt</span><span class="special">(</span><span class="identifier">a</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// print root-2</span> + + <span class="comment">// Operations at fixed precision and full numeric_limits support:</span> + <span class="identifier">mpfi_float_100</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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">mpfi_float_100</span><span class="special">>::</span><span class="identifier">digits</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="comment">// We can use any C++ std lib function:</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">log</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// print log(2)</span> + + <span class="comment">// Access the underlying data:</span> + <span class="identifier">mpfi_t</span> <span class="identifier">r</span><span class="special">;</span> + <span class="identifier">mpfi_init</span><span class="special">(</span><span class="identifier">r</span><span class="special">);</span> + <span class="identifier">mpfi_set</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">b</span><span class="special">.</span><span class="identifier">backend</span><span class="special">().</span><span class="identifier">data</span><span class="special">());</span> + + <span class="comment">// Construct some explicit intervals and perform set operations:</span> + <span class="identifier">mpfi_float_50</span> <span class="identifier">i1</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">),</span> <span class="identifier">i2</span><span class="special">(</span><span class="number">1.5</span><span class="special">,</span> <span class="number">2.5</span><span class="special">);</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">intersect</span><span class="special">(</span><span class="identifier">i1</span><span class="special">,</span> <span class="identifier">i2</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">hull</span><span class="special">(</span><span class="identifier">i1</span><span class="special">,</span> <span class="identifier">i2</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">overlap</span><span class="special">(</span><span class="identifier">i1</span><span class="special">,</span> <span class="identifier">i2</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">subset</span><span class="special">(</span><span class="identifier">i1</span><span class="special">,</span> <span class="identifier">i2</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">mpfi_clear</span><span class="special">(</span><span class="identifier">r</span><span class="special">);</span> + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../interval.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../interval.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="../rational.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/ints.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints.html new file mode 100644 index 0000000000..1c606ab903 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints.html @@ -0,0 +1,200 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Integer Types</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../tut.html" title="Tutorial"> +<link rel="prev" href="../tut.html" title="Tutorial"> +<link rel="next" href="ints/cpp_int.html" title="cpp_int"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../tut.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="ints/cpp_int.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.tut.ints"></a><a class="link" href="ints.html" title="Integer Types">Integer Types</a> +</h3></div></div></div> +<div class="toc"><dl class="toc"> +<dt><span class="section"><a href="ints/cpp_int.html">cpp_int</a></span></dt> +<dt><span class="section"><a href="ints/gmp_int.html">gmp_int</a></span></dt> +<dt><span class="section"><a href="ints/tom_int.html">tom_int</a></span></dt> +<dt><span class="section"><a href="ints/egs.html">Examples</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="ints/egs/factorials.html">Factorials</a></span></dt> +<dt><span class="section"><a href="ints/egs/bitops.html">Bit Operations</a></span></dt> +</dl></dd> +</dl></div> +<p> + The following back-ends provide integer arithmetic: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend Type + </p> + </th> +<th> + <p> + Header + </p> + </th> +<th> + <p> + Radix + </p> + </th> +<th> + <p> + Dependencies + </p> + </th> +<th> + <p> + Pros + </p> + </th> +<th> + <p> + Cons + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">cpp_int</span></code> + </p> + </td> +<td> + <p> + boost/multiprecision/cpp_int.hpp + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + None + </p> + </td> +<td> + <p> + Very versatile, Boost licensed, all C++ integer type which support + both <a href="http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic" target="_top">arbitrary + precision</a> and fixed precision integer types. + </p> + </td> +<td> + <p> + Slower than <a href="http://gmplib.org" target="_top">GMP</a>, though + typically not as slow as <a href="http://libtom.org/?page=features&newsitems=5&whatfile=ltm" target="_top">libtommath</a> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">gmp_int</span></code> + </p> + </td> +<td> + <p> + boost/multiprecision/gmp.hpp + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + <a href="http://gmplib.org" target="_top">GMP</a> + </p> + </td> +<td> + <p> + Very fast and efficient back-end. + </p> + </td> +<td> + <p> + Dependency on GNU licensed <a href="http://gmplib.org" target="_top">GMP</a> + library. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">tom_int</span></code> + </p> + </td> +<td> + <p> + boost/multiprecision/tommath.hpp + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + <a href="http://libtom.org/?page=features&newsitems=5&whatfile=ltm" target="_top">libtommath</a> + </p> + </td> +<td> + <p> + Public domain back-end with no licence restrictions. + </p> + </td> +<td> + <p> + Slower than <a href="http://gmplib.org" target="_top">GMP</a>. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../tut.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="ints/cpp_int.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/cpp_int.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/cpp_int.html new file mode 100644 index 0000000000..ab836530fc --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/cpp_int.html @@ -0,0 +1,385 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>cpp_int</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../ints.html" title="Integer Types"> +<link rel="prev" href="../ints.html" title="Integer Types"> +<link rel="next" href="gmp_int.html" title="gmp_int"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../ints.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ints.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="gmp_int.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.ints.cpp_int"></a><a class="link" href="cpp_int.html" title="cpp_int">cpp_int</a> +</h4></div></div></div> +<p> + <code class="computeroutput"><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_int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">typedef</span> <span class="identifier">unspecified</span><span class="special">-</span><span class="identifier">type</span> <span class="identifier">limb_type</span><span class="special">;</span> + +<span class="keyword">enum</span> <span class="identifier">cpp_integer_type</span> <span class="special">{</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span> <span class="special">};</span> +<span class="keyword">enum</span> <span class="identifier">cpp_int_check_type</span> <span class="special">{</span> <span class="identifier">checked</span><span class="special">,</span> <span class="identifier">unchecked</span> <span class="special">};</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">MinBits</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> + <span class="keyword">unsigned</span> <span class="identifier">MaxBits</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> + <span class="identifier">cpp_integer_type</span> <span class="identifier">SignType</span> <span class="special">=</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> + <span class="identifier">cpp_int_check_type</span> <span class="identifier">Checked</span> <span class="special">=</span> <span class="identifier">unchecked</span><span class="special">,</span> + <span class="keyword">class</span> <span class="identifier">Allocator</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special"><</span><span class="identifier">limb_type</span><span class="special">></span> <span class="special">></span> +<span class="keyword">class</span> <span class="identifier">cpp_int_backend</span><span class="special">;</span> +<span class="comment">//</span> +<span class="comment">// Expression templates default to et_off if there is no allocator:</span> +<span class="comment">//</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">MinBits</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">MaxBits</span><span class="special">,</span> <span class="identifier">cpp_integer_type</span> <span class="identifier">SignType</span><span class="special">,</span> <span class="identifier">cpp_int_check_type</span> <span class="identifier">Checked</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">expression_template_default</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="identifier">MinBits</span><span class="special">,</span> <span class="identifier">MaxBits</span><span class="special">,</span> <span class="identifier">SignType</span><span class="special">,</span> <span class="identifier">Checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> +<span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">expression_template_option</span> <span class="identifier">value</span> <span class="special">=</span> <span class="identifier">et_off</span><span class="special">;</span> <span class="special">};</span> + +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><></span> <span class="special">></span> <span class="identifier">cpp_int</span><span class="special">;</span> <span class="comment">// arbitrary precision integer</span> +<span class="keyword">typedef</span> <span class="identifier">rational_adaptor</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><></span> <span class="special">></span> <span class="identifier">cpp_rational_backend</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_rational_backend</span><span class="special">></span> <span class="identifier">cpp_rational</span><span class="special">;</span> <span class="comment">// arbitrary precision rational number</span> + +<span class="comment">// Fixed precision unsigned types:</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">128</span><span class="special">,</span> <span class="number">128</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">uint128_t</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">256</span><span class="special">,</span> <span class="number">256</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">uint256_t</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">512</span><span class="special">,</span> <span class="number">512</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">uint512_t</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">1024</span><span class="special">,</span> <span class="number">1024</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">uint1024_t</span><span class="special">;</span> + +<span class="comment">// Fixed precision signed types:</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">128</span><span class="special">,</span> <span class="number">128</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">int128_t</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">256</span><span class="special">,</span> <span class="number">256</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">int256_t</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">512</span><span class="special">,</span> <span class="number">512</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">int512_t</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">1024</span><span class="special">,</span> <span class="number">1024</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">int1024_t</span><span class="special">;</span> + +<span class="comment">// Over again, but with checking enabled this time:</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">0</span><span class="special">,</span> <span class="number">0</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">></span> <span class="special">></span> <span class="identifier">checked_cpp_int</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">rational_adaptor</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">0</span><span class="special">,</span> <span class="number">0</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">></span> <span class="special">></span> <span class="identifier">checked_cpp_rational_backend</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_rational_backend</span><span class="special">></span> <span class="identifier">checked_cpp_rational</span><span class="special">;</span> + +<span class="comment">// Checked fixed precision unsigned types:</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">128</span><span class="special">,</span> <span class="number">128</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">checked_uint128_t</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">256</span><span class="special">,</span> <span class="number">256</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">checked_uint256_t</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">512</span><span class="special">,</span> <span class="number">512</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">checked_uint512_t</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">1024</span><span class="special">,</span> <span class="number">1024</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">checked_uint1024_t</span><span class="special">;</span> + +<span class="comment">// Fixed precision signed types:</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">128</span><span class="special">,</span> <span class="number">128</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">checked_int128_t</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">256</span><span class="special">,</span> <span class="number">256</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">checked_int256_t</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">512</span><span class="special">,</span> <span class="number">512</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">checked_int512_t</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="number">1024</span><span class="special">,</span> <span class="number">1024</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">></span> <span class="special">></span> <span class="identifier">checked_int1024_t</span><span class="special">;</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> +</pre> +<p> + The <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code> type + is normally used via one of the convenience typedefs given above. + </p> +<p> + This back-end is the "Swiss Army Knife" of integer types as it + can represent both fixed and <a href="http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic" target="_top">arbitrary + precision</a> integer types, and both signed and unsigned types. There + are five template arguments: + </p> +<div class="variablelist"> +<p class="title"><b></b></p> +<dl class="variablelist"> +<dt><span class="term">MinBits</span></dt> +<dd><p> + Determines the number of Bits to store directly within the object + before resorting to dynamic memory allocation. When zero, this field + is determined automatically based on how many bits can be stored + in union with the dynamic storage header: setting a larger value + may improve performance as larger integer values will be stored internally + before memory allocation is required. + </p></dd> +<dt><span class="term">MaxBits</span></dt> +<dd><p> + Determines the maximum number of bits to be stored in the type: resulting + in a fixed precision type. When this value is the same as MinBits, + then the Allocator parameter is ignored, as no dynamic memory allocation + will ever be performed: in this situation the Allocator parameter + should be set to type <code class="computeroutput"><span class="keyword">void</span></code>. + Note that this parameter should not be used simply to prevent large + memory allocations, not only is that role better performed by the + allocator, but fixed precision integers have a tendency to allocate + all of MaxBits of storage more often than one would expect. + </p></dd> +<dt><span class="term">SignType</span></dt> +<dd><p> + Determines whether the resulting type is signed or not. Note that + for <a href="http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic" target="_top">arbitrary + precision</a> types this parameter must be <code class="computeroutput"><span class="identifier">signed_magnitude</span></code>. + For fixed precision types then this type may be either <code class="computeroutput"><span class="identifier">signed_magnitude</span></code> or <code class="computeroutput"><span class="identifier">unsigned_magnitude</span></code>. + </p></dd> +<dt><span class="term">Checked</span></dt> +<dd><p> + This parameter has two values: <code class="computeroutput"><span class="identifier">checked</span></code> + or <code class="computeroutput"><span class="identifier">unchecked</span></code>. See + below. + </p></dd> +<dt><span class="term">Allocator</span></dt> +<dd><p> + The allocator to use for dynamic memory allocation, or type <code class="computeroutput"><span class="keyword">void</span></code> if MaxBits == MinBits. + </p></dd> +</dl> +</div> +<p> + When the template parameter Checked is set to <code class="computeroutput"><span class="identifier">checked</span></code> + then the result is a <span class="emphasis"><em>checked-integer</em></span>, checked and + unchecked integers have the following properties: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Condition + </p> + </th> +<th> + <p> + Checked-Integer + </p> + </th> +<th> + <p> + Unchecked-Integer + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + Numeric overflow in fixed precision arithmetic + </p> + </td> +<td> + <p> + Throws a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code>. + </p> + </td> +<td> + <p> + Performs arithmetic modulo 2<sup>MaxBits</sup> + </p> + </td> +</tr> +<tr> +<td> + <p> + Constructing an integer from a value that can not be represented + in the target type + </p> + </td> +<td> + <p> + Throws a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">range_error</span></code>. + </p> + </td> +<td> + <p> + Converts the value modulo 2<sup>MaxBits</sup>, signed to unsigned conversions + extract the last MaxBits bits of the 2's complement representation + of the input value. + </p> + </td> +</tr> +<tr> +<td> + <p> + Unsigned subtraction yielding a negative value. + </p> + </td> +<td> + <p> + Throws a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">range_error</span></code>. + </p> + </td> +<td> + <p> + Yields the value that would result from treating the unsigned + type as a 2's complement signed type. + </p> + </td> +</tr> +<tr> +<td> + <p> + Attempting a bitwise operation on a negative value. + </p> + </td> +<td> + <p> + Throws a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">range_error</span></code> + </p> + </td> +<td> + <p> + Yields the value, but not the bit pattern, that would result + from performing the operation on a 2's complement integer type. + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + Things you should know when using this type: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + Default constructed <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code>s + have the value zero. + </li> +<li class="listitem"> + Division by zero results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> + being thrown. + </li> +<li class="listitem"> + Construction from a string that contains invalid non-numeric characters + results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> being thrown. + </li> +<li class="listitem"> + Since the precision of <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code> + is necessarily limited when the allocator parameter is void, care should + be taken to avoid numeric overflow when using this type unless you + actually want modulo-arithmetic behavior. + </li> +<li class="listitem"> + The type uses a sign-magnitude representation internally, so type + <code class="computeroutput"><span class="identifier">int128_t</span></code> has 128-bits + of precision plus an extra sign bit. In this respect the behaviour + of these types differs from built-in 2's complement types. In might + be tempting to use a 127-bit type instead, and indeed this does work, + but behaviour is still slightly different from a 2's complement built-in + type as the min and max values are identical (apart from the sign), + where as they differ by one for a true 2's complement type. That said + it should be noted that there's no requirement for built-in types to + be 2's complement either - it's simply that this is the most common + format by far. + </li> +<li class="listitem"> + Attempting to print negative values as either an Octal or Hexadecimal + string results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + being thrown, this is a direct consequence of the sign-magnitude representation. + </li> +<li class="listitem"> + The fixed precision types <code class="computeroutput"><span class="special">[</span><span class="identifier">checked_</span><span class="special">][</span><span class="identifier">u</span><span class="special">]</span><span class="identifier">intXXX_t</span></code> have expression template + support turned off - it seems to make little difference to the performance + of these types either way - so we may as well have the faster compile + times by turning the feature off. + </li> +<li class="listitem"> + Unsigned types support subtraction - the result is "as if" + a 2's complement operation had been performed as long as they are not + <span class="emphasis"><em>checked-integers</em></span> (see above). In other words they + behave pretty much as a built in integer type would in this situation. + So for example if we were using <code class="computeroutput"><span class="identifier">uint128_t</span></code> + then <code class="computeroutput"><span class="identifier">uint128_t</span><span class="special">(</span><span class="number">1</span><span class="special">)-</span><span class="number">4</span></code> + would result in the value <code class="computeroutput"><span class="number">0</span><span class="identifier">xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD</span></code> + of type <code class="computeroutput"><span class="identifier">uint128_t</span></code>. + However, had this operation been performed on <code class="computeroutput"><span class="identifier">checked_uint128_t</span></code> + then a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">range_error</span></code> would have been thrown. + </li> +<li class="listitem"> + Unary negation of unsigned types results in a compiler error (static + assertion). + </li> +<li class="listitem"> + This backend supports rvalue-references and is move-aware, making instantiations + of <code class="computeroutput"><span class="identifier">number</span></code> on this backend + move aware. + </li> +<li class="listitem"> + When used at fixed precision, the size of this type is always one machine + word larger than you would expect for an N-bit integer: the extra word + stores both the sign, and how many machine words in the integer are + actually in use. The latter is an optimisation for larger fixed precision + integers, so that a 1024-bit integer has almost the same performance + characteristics as a 128-bit integer, rather than being 4 times slower + for addition and 16 times slower for multiplication (assuming the values + involved would always fit in 128 bits). Typically this means you can + use an integer type wide enough for the "worst case scenario" + with only minor performance degradation even if most of the time the + arithmetic could in fact be done with a narrower type. + </li> +<li class="listitem"> + When used at fixed precision and MaxBits is smaller than the number + of bits in the largest native integer type, then internally <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code> switches to a "trivial" + implementation where it is just a thin wrapper around a single integer. + Note that it will still be slightly slower than a bare native integer, + as it emulates a signed-magnitude representation rather than simply + using the platforms native sign representation: this ensures there + is no step change in behavior as a cpp_int grows in size. + </li> +<li class="listitem"> + Fixed precision <code class="computeroutput"><span class="identifier">cpp_int</span></code>'s + have some support for <code class="computeroutput"><span class="keyword">constexpr</span></code> + values and user-defined literals, see <a class="link" href="../lits.html" title="Literal Types and constexpr Support">here</a> + for the full description. For example <code class="computeroutput"><span class="number">0xfffff</span><span class="identifier">_cppi1024</span></code> specifies a 1024-bit integer + with the value 0xffff. This can be used to generate compile time constants + that are too large to fit into any built in number type. + </li> +</ul></div> +<h6> +<a name="boost_multiprecision.tut.ints.cpp_int.h0"></a> + <span class="phrase"><a name="boost_multiprecision.tut.ints.cpp_int.example"></a></span><a class="link" href="cpp_int.html#boost_multiprecision.tut.ints.cpp_int.example">Example:</a> + </h6> +<pre class="programlisting"><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_int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> +<span class="special">{</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span> + + <span class="identifier">int128_t</span> <span class="identifier">v</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> + + <span class="comment">// Do some fixed precision arithmetic:</span> + <span class="keyword">for</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><=</span> <span class="number">20</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> + <span class="identifier">v</span> <span class="special">*=</span> <span class="identifier">i</span><span class="special">;</span> + + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">v</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// prints 20!</span> + + <span class="comment">// Repeat at arbitrary precision:</span> + <span class="identifier">cpp_int</span> <span class="identifier">u</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> + <span class="keyword">for</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><=</span> <span class="number">100</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> + <span class="identifier">u</span> <span class="special">*=</span> <span class="identifier">i</span><span class="special">;</span> + + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">u</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// prints 100!</span> + + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../ints.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ints.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="gmp_int.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs.html new file mode 100644 index 0000000000..f53916fe46 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs.html @@ -0,0 +1,47 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Examples</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../ints.html" title="Integer Types"> +<link rel="prev" href="tom_int.html" title="tom_int"> +<link rel="next" href="egs/factorials.html" title="Factorials"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="tom_int.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ints.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="egs/factorials.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.ints.egs"></a><a class="link" href="egs.html" title="Examples">Examples</a> +</h4></div></div></div> +<div class="toc"><dl class="toc"> +<dt><span class="section"><a href="egs/factorials.html">Factorials</a></span></dt> +<dt><span class="section"><a href="egs/bitops.html">Bit Operations</a></span></dt> +</dl></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="tom_int.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ints.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="egs/factorials.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs/bitops.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs/bitops.html new file mode 100644 index 0000000000..7b8cf2d5b8 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs/bitops.html @@ -0,0 +1,95 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Bit Operations</title> +<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../egs.html" title="Examples"> +<link rel="prev" href="factorials.html" title="Factorials"> +<link rel="next" href="../../floats.html" title="Floating Point Numbers"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="factorials.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../egs.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="../../floats.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="boost_multiprecision.tut.ints.egs.bitops"></a><a class="link" href="bitops.html" title="Bit Operations">Bit Operations</a> +</h5></div></div></div> +<p> + In this example we'll show how individual bits within an integer may + be manipulated, we'll start with an often needed calculation of <span class="emphasis"><em>2<sup>n</sup> - + 1</em></span>, which we could obviously implement like this: + </p> +<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_int</span><span class="special">;</span> + +<span class="identifier">cpp_int</span> <span class="identifier">b1</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">n</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">cpp_int</span> <span class="identifier">r</span><span class="special">(</span><span class="number">1</span><span class="special">);</span> + <span class="keyword">return</span> <span class="special">(</span><span class="identifier">r</span> <span class="special"><<</span> <span class="identifier">n</span><span class="special">)</span> <span class="special">-</span> <span class="number">1</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + Calling: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">hex</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">showbase</span> <span class="special"><<</span> <span class="identifier">b1</span><span class="special">(</span><span class="number">200</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +</pre> +<p> + Yields as expected: + </p> +<pre class="programlisting">0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF</pre> +<p> + However, we could equally just set the n'th bit in the result, like this: + </p> +<pre class="programlisting"><span class="identifier">cpp_int</span> <span class="identifier">b2</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">n</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">cpp_int</span> <span class="identifier">r</span><span class="special">(</span><span class="number">0</span><span class="special">);</span> + <span class="keyword">return</span> <span class="special">--</span><span class="identifier">bit_set</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">n</span><span class="special">);</span> +<span class="special">}</span> +</pre> +<p> + Note how the <code class="computeroutput"><span class="identifier">bit_set</span></code> + function sets the specified bit in its argument and then returns a reference + to the result - which we can then simply decrement. The result from a + call to <code class="computeroutput"><span class="identifier">b2</span></code> is the same + as that to <code class="computeroutput"><span class="identifier">b1</span></code>. + </p> +<p> + We can equally test bits, so for example the n'th bit of the result returned + from <code class="computeroutput"><span class="identifier">b2</span></code> shouldn't be + set unless we increment it first: + </p> +<pre class="programlisting"><span class="identifier">assert</span><span class="special">(!</span><span class="identifier">bit_test</span><span class="special">(</span><span class="identifier">b1</span><span class="special">(</span><span class="number">200</span><span class="special">),</span> <span class="number">200</span><span class="special">));</span> <span class="comment">// OK</span> +<span class="identifier">assert</span><span class="special">(</span><span class="identifier">bit_test</span><span class="special">(++</span><span class="identifier">b1</span><span class="special">(</span><span class="number">200</span><span class="special">),</span> <span class="number">200</span><span class="special">));</span> <span class="comment">// OK</span> +</pre> +<p> + And of course if we flip the n'th bit after increment, then we should + get back to zero: + </p> +<pre class="programlisting"><span class="identifier">assert</span><span class="special">(!</span><span class="identifier">bit_flip</span><span class="special">(++</span><span class="identifier">b1</span><span class="special">(</span><span class="number">200</span><span class="special">),</span> <span class="number">200</span><span class="special">));</span> <span class="comment">// OK</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="factorials.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../egs.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="../../floats.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs/factorials.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs/factorials.html new file mode 100644 index 0000000000..7566f7e4aa --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs/factorials.html @@ -0,0 +1,149 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Factorials</title> +<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../egs.html" title="Examples"> +<link rel="prev" href="../egs.html" title="Examples"> +<link rel="next" href="bitops.html" title="Bit Operations"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../egs.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../egs.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="bitops.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="boost_multiprecision.tut.ints.egs.factorials"></a><a class="link" href="factorials.html" title="Factorials">Factorials</a> +</h5></div></div></div> +<p> + In this simple example, we'll write a routine to print out all of the + factorials which will fit into a 128-bit integer. At the end of the routine + we do some fancy iostream formatting of the results: + </p> +<pre class="programlisting"><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_int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iomanip</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">vector</span><span class="special">></span> + + +<span class="keyword">void</span> <span class="identifier">print_factorials</span><span class="special">()</span> +<span class="special">{</span> + <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_int</span><span class="special">;</span> + <span class="comment">//</span> + <span class="comment">// Print all the factorials that will fit inside a 128-bit integer.</span> + <span class="comment">//</span> + <span class="comment">// Begin by building a big table of factorials, once we know just how </span> + <span class="comment">// large the largest is, we'll be able to "pretty format" the results.</span> + <span class="comment">//</span> + <span class="comment">// Calculate the largest number that will fit inside 128 bits, we could</span> + <span class="comment">// also have used numeric_limits<int128_t>::max() for this value:</span> + <span class="identifier">cpp_int</span> <span class="identifier">limit</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">cpp_int</span><span class="special">(</span><span class="number">1</span><span class="special">)</span> <span class="special"><<</span> <span class="number">128</span><span class="special">)</span> <span class="special">-</span> <span class="number">1</span><span class="special">;</span> + <span class="comment">// </span> + <span class="comment">// Our table of values:</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">cpp_int</span><span class="special">></span> <span class="identifier">results</span><span class="special">;</span> + <span class="comment">//</span> + <span class="comment">// Initial values:</span> + <span class="keyword">unsigned</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> + <span class="identifier">cpp_int</span> <span class="identifier">factorial</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> + <span class="comment">//</span> + <span class="comment">// Cycle through the factorials till we reach the limit:</span> + <span class="keyword">while</span><span class="special">(</span><span class="identifier">factorial</span> <span class="special"><</span> <span class="identifier">limit</span><span class="special">)</span> + <span class="special">{</span> + <span class="identifier">results</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">factorial</span><span class="special">);</span> + <span class="special">++</span><span class="identifier">i</span><span class="special">;</span> + <span class="identifier">factorial</span> <span class="special">*=</span> <span class="identifier">i</span><span class="special">;</span> + <span class="special">}</span> + <span class="comment">//</span> + <span class="comment">// Lets see how many digits the largest factorial was:</span> + <span class="keyword">unsigned</span> <span class="identifier">digits</span> <span class="special">=</span> <span class="identifier">results</span><span class="special">.</span><span class="identifier">back</span><span class="special">().</span><span class="identifier">str</span><span class="special">().</span><span class="identifier">size</span><span class="special">();</span> + <span class="comment">//</span> + <span class="comment">// Now print them out, using right justification, while we're at it</span> + <span class="comment">// we'll indicate the limit of each integer type, so begin by defining</span> + <span class="comment">// the limits for 16, 32, 64 etc bit integers:</span> + <span class="identifier">cpp_int</span> <span class="identifier">limits</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> + <span class="special">(</span><span class="identifier">cpp_int</span><span class="special">(</span><span class="number">1</span><span class="special">)</span> <span class="special"><<</span> <span class="number">16</span><span class="special">)</span> <span class="special">-</span> <span class="number">1</span><span class="special">,</span> + <span class="special">(</span><span class="identifier">cpp_int</span><span class="special">(</span><span class="number">1</span><span class="special">)</span> <span class="special"><<</span> <span class="number">32</span><span class="special">)</span> <span class="special">-</span> <span class="number">1</span><span class="special">,</span> + <span class="special">(</span><span class="identifier">cpp_int</span><span class="special">(</span><span class="number">1</span><span class="special">)</span> <span class="special"><<</span> <span class="number">64</span><span class="special">)</span> <span class="special">-</span> <span class="number">1</span><span class="special">,</span> + <span class="special">(</span><span class="identifier">cpp_int</span><span class="special">(</span><span class="number">1</span><span class="special">)</span> <span class="special"><<</span> <span class="number">128</span><span class="special">)</span> <span class="special">-</span> <span class="number">1</span><span class="special">,</span> + <span class="special">};</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">bit_counts</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="string">"16"</span><span class="special">,</span> <span class="string">"32"</span><span class="special">,</span> <span class="string">"64"</span><span class="special">,</span> <span class="string">"128"</span> <span class="special">};</span> + <span class="keyword">unsigned</span> <span class="identifier">current_limit</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> + <span class="keyword">for</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">j</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">j</span> <span class="special"><</span> <span class="identifier">results</span><span class="special">.</span><span class="identifier">size</span><span class="special">();</span> <span class="special">++</span><span class="identifier">j</span><span class="special">)</span> + <span class="special">{</span> + <span class="keyword">if</span><span class="special">(</span><span class="identifier">limits</span><span class="special">[</span><span class="identifier">current_limit</span><span class="special">]</span> <span class="special"><</span> <span class="identifier">results</span><span class="special">[</span><span class="identifier">j</span><span class="special">])</span> + <span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">message</span> <span class="special">=</span> <span class="string">"Limit of "</span> <span class="special">+</span> <span class="identifier">bit_counts</span><span class="special">[</span><span class="identifier">current_limit</span><span class="special">]</span> <span class="special">+</span> <span class="string">" bit integers"</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setfill</span><span class="special">(</span><span class="char">'.'</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setw</span><span class="special">(</span><span class="identifier">digits</span><span class="special">+</span><span class="number">1</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">right</span> <span class="special"><<</span> <span class="identifier">message</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setfill</span><span class="special">(</span><span class="char">' '</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="special">++</span><span class="identifier">current_limit</span><span class="special">;</span> + <span class="special">}</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setw</span><span class="special">(</span><span class="identifier">digits</span> <span class="special">+</span> <span class="number">1</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">right</span> <span class="special"><<</span> <span class="identifier">results</span><span class="special">[</span><span class="identifier">j</span><span class="special">]</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="special">}</span> +<span class="special">}</span> +</pre> +<p> + The output from this routine is: + </p> +<pre class="programlisting"> 1 + 2 + 6 + 24 + 120 + 720 + 5040 + 40320 +................Limit of 16 bit integers + 362880 + 3628800 + 39916800 + 479001600 +................Limit of 32 bit integers + 6227020800 + 87178291200 + 1307674368000 + 20922789888000 + 355687428096000 + 6402373705728000 + 121645100408832000 + 2432902008176640000 +................Limit of 64 bit integers + 51090942171709440000 + 1124000727777607680000 + 25852016738884976640000 + 620448401733239439360000 + 15511210043330985984000000 + 403291461126605635584000000 + 10888869450418352160768000000 + 304888344611713860501504000000 + 8841761993739701954543616000000 + 265252859812191058636308480000000 + 8222838654177922817725562880000000 + 263130836933693530167218012160000000 + 8683317618811886495518194401280000000 + 295232799039604140847618609643520000000 +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../egs.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../egs.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="bitops.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/gmp_int.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/gmp_int.html new file mode 100644 index 0000000000..e27cdf7c59 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/gmp_int.html @@ -0,0 +1,148 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>gmp_int</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../ints.html" title="Integer Types"> +<link rel="prev" href="cpp_int.html" title="cpp_int"> +<link rel="next" href="tom_int.html" title="tom_int"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="cpp_int.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ints.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="tom_int.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.ints.gmp_int"></a><a class="link" href="gmp_int.html" title="gmp_int">gmp_int</a> +</h4></div></div></div> +<p> + <code class="computeroutput"><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">gmp</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">class</span> <span class="identifier">gmp_int</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">gmp_int</span> <span class="special">></span> <span class="identifier">mpz_int</span><span class="special">;</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> +</pre> +<p> + The <code class="computeroutput"><span class="identifier">gmp_int</span></code> back-end is + used via the typedef <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">mpz_int</span></code>. + It acts as a thin wrapper around the <a href="http://gmplib.org" target="_top">GMP</a> + <code class="computeroutput"><span class="identifier">mpz_t</span></code> to provide an integer + type that is a drop-in replacement for the native C++ integer types, but + with unlimited precision. + </p> +<p> + As well as the usual conversions from arithmetic and string types, type + <code class="computeroutput"><span class="identifier">mpz_int</span></code> is copy constructible + and assignable from: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + The <a href="http://gmplib.org" target="_top">GMP</a> native types: <code class="computeroutput"><span class="identifier">mpf_t</span></code>, <code class="computeroutput"><span class="identifier">mpz_t</span></code>, + <code class="computeroutput"><span class="identifier">mpq_t</span></code>. + </li> +<li class="listitem"> + Instances of <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> that are wrappers around those + types: <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">gmp_float</span><span class="special"><</span><span class="identifier">N</span><span class="special">></span> <span class="special">></span></code>, <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">gmp_rational</span><span class="special">></span></code>. + </li> +</ul></div> +<p> + It's also possible to access the underlying <code class="computeroutput"><span class="identifier">mpz_t</span></code> + via the <code class="computeroutput"><span class="identifier">data</span><span class="special">()</span></code> + member function of <code class="computeroutput"><span class="identifier">gmp_int</span></code>. + </p> +<p> + Things you should know when using this type: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + No changes are made to the GMP library's global settings - so you can + safely mix this type with existing code that uses <a href="http://gmplib.org" target="_top">GMP</a>. + </li> +<li class="listitem"> + Default constructed <code class="computeroutput"><span class="identifier">gmp_int</span></code>s + have the value zero (this is GMP's default behavior). + </li> +<li class="listitem"> + Formatted IO for this type does not support octal or hexadecimal notation + for negative values, as a result performing formatted output on this + type when the argument is negative and either of the flags <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">::</span><span class="identifier">oct</span></code> or <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">::</span><span class="identifier">hex</span></code> + are set, will result in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + will be thrown. + </li> +<li class="listitem"> + Conversion from a string results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + being thrown if the string can not be interpreted as a valid integer. + </li> +<li class="listitem"> + Division by zero results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> + being thrown. + </li> +<li class="listitem"> + Although this type is a wrapper around <a href="http://gmplib.org" target="_top">GMP</a> + it will work equally well with <a href="http://mpir.org/" target="_top">MPIR</a>. + Indeed use of <a href="http://mpir.org/" target="_top">MPIR</a> is recommended + on Win32. + </li> +<li class="listitem"> + This backend supports rvalue-references and is move-aware, making instantiations + of <code class="computeroutput"><span class="identifier">number</span></code> on this backend + move aware. + </li> +</ul></div> +<h6> +<a name="boost_multiprecision.tut.ints.gmp_int.h0"></a> + <span class="phrase"><a name="boost_multiprecision.tut.ints.gmp_int.example"></a></span><a class="link" href="gmp_int.html#boost_multiprecision.tut.ints.gmp_int.example">Example:</a> + </h6> +<pre class="programlisting"><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">gmp</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> +<span class="special">{</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span> + + <span class="identifier">mpz_int</span> <span class="identifier">v</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> + + <span class="comment">// Do some arithmetic:</span> + <span class="keyword">for</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><=</span> <span class="number">1000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> + <span class="identifier">v</span> <span class="special">*=</span> <span class="identifier">i</span><span class="special">;</span> + + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">v</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// prints 1000!</span> + + <span class="comment">// Access the underlying representation:</span> + <span class="identifier">mpz_t</span> <span class="identifier">z</span><span class="special">;</span> + <span class="identifier">mpz_init</span><span class="special">(</span><span class="identifier">z</span><span class="special">);</span> + <span class="identifier">mpz_set</span><span class="special">(</span><span class="identifier">z</span><span class="special">,</span> <span class="identifier">v</span><span class="special">.</span><span class="identifier">backend</span><span class="special">().</span><span class="identifier">data</span><span class="special">());</span> + <span class="identifier">mpz_clear</span><span class="special">(</span><span class="identifier">z</span><span class="special">);</span> + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="cpp_int.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ints.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="tom_int.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/tom_int.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/tom_int.html new file mode 100644 index 0000000000..265acbde50 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/tom_int.html @@ -0,0 +1,134 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>tom_int</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../ints.html" title="Integer Types"> +<link rel="prev" href="gmp_int.html" title="gmp_int"> +<link rel="next" href="egs.html" title="Examples"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="gmp_int.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ints.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="egs.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.ints.tom_int"></a><a class="link" href="tom_int.html" title="tom_int">tom_int</a> +</h4></div></div></div> +<p> + <code class="computeroutput"><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">tommath</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">class</span> <span class="identifier">tommath_int</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">tommath_int</span> <span class="special">></span> <span class="identifier">tom_int</span><span class="special">;</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> +</pre> +<p> + The <code class="computeroutput"><span class="identifier">tommath_int</span></code> back-end + is used via the typedef <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">tom_int</span></code>. + It acts as a thin wrapper around the <a href="http://libtom.org/?page=features&newsitems=5&whatfile=ltm" target="_top">libtommath</a> + <code class="computeroutput"><span class="identifier">tom_int</span></code> to provide an integer + type that is a drop-in replacement for the native C++ integer types, but + with unlimited precision. + </p> +<p> + Things you should know when using this type: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + Default constructed objects have the value zero (this is <a href="http://libtom.org/?page=features&newsitems=5&whatfile=ltm" target="_top">libtommath</a>'s + default behavior). + </li> +<li class="listitem"> + Although <code class="computeroutput"><span class="identifier">tom_int</span></code> is + mostly a drop in replacement for the builtin integer types, it should + be noted that it is a rather strange beast as it's a signed type that + is not a 2's complement type. As a result the bitwise operations <code class="computeroutput"><span class="special">|</span> <span class="special">&</span> <span class="special">^</span></code> will throw a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + exception if either of the arguments is negative. Similarly the complement + operator<code class="computeroutput"><span class="special">~</span></code> is deliberately + not implemented for this type. + </li> +<li class="listitem"> + Formatted IO for this type does not support octal or hexadecimal notation + for negative values, as a result performing formatted output on this + type when the argument is negative and either of the flags <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">::</span><span class="identifier">oct</span></code> or <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">::</span><span class="identifier">hex</span></code> + are set, will result in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + will be thrown. + </li> +<li class="listitem"> + Conversion from a string results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + being thrown if the string can not be interpreted as a valid integer. + </li> +<li class="listitem"> + Division by zero results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> + being thrown. + </li> +</ul></div> +<h6> +<a name="boost_multiprecision.tut.ints.tom_int.h0"></a> + <span class="phrase"><a name="boost_multiprecision.tut.ints.tom_int.example"></a></span><a class="link" href="tom_int.html#boost_multiprecision.tut.ints.tom_int.example">Example:</a> + </h6> +<pre class="programlisting"><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">tommath</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</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">tom_int</span> <span class="identifier">v</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> + + <span class="comment">// Do some arithmetic:</span> + <span class="keyword">for</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><=</span> <span class="number">1000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> + <span class="identifier">v</span> <span class="special">*=</span> <span class="identifier">i</span><span class="special">;</span> + + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">v</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// prints 1000!</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">hex</span> <span class="special"><<</span> <span class="identifier">v</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// prints 1000! in hex format</span> + + <span class="keyword">try</span><span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">hex</span> <span class="special"><<</span> <span class="special">-</span><span class="identifier">v</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// Ooops! can't print a negative value in hex format!</span> + <span class="special">}</span> + <span class="keyword">catch</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span><span class="special">&</span> <span class="identifier">e</span><span class="special">)</span> + <span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">e</span><span class="special">.</span><span class="identifier">what</span><span class="special">()</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="special">}</span> + + <span class="keyword">try</span><span class="special">{</span> + <span class="comment">// v is not a 2's complement type, bitwise operations are only supported</span> + <span class="comment">// on positive values:</span> + <span class="identifier">v</span> <span class="special">=</span> <span class="special">-</span><span class="identifier">v</span> <span class="special">&</span> <span class="number">2</span><span class="special">;</span> + <span class="special">}</span> + <span class="keyword">catch</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span><span class="special">&</span> <span class="identifier">e</span><span class="special">)</span> + <span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">e</span><span class="special">.</span><span class="identifier">what</span><span class="special">()</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="special">}</span> + + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="gmp_int.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ints.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="egs.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/limits.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/limits.html new file mode 100644 index 0000000000..5cd48aaced --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/limits.html @@ -0,0 +1,100 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Numeric Limits</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../tut.html" title="Tutorial"> +<link rel="prev" href="serial.html" title="Boost.Serialization Support"> +<link rel="next" href="limits/constants.html" title="std::numeric_limits<> constants"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="serial.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="limits/constants.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.tut.limits"></a><a class="link" href="limits.html" title="Numeric Limits">Numeric Limits</a> +</h3></div></div></div> +<div class="toc"><dl class="toc"> +<dt><span class="section"><a href="limits/constants.html">std::numeric_limits<> + constants</a></span></dt> +<dt><span class="section"><a href="limits/functions.html">std::numeric_limits<> + functions</a></span></dt> +<dt><span class="section"><a href="limits/limits32.html">Numeric limits + for 32-bit platform</a></span></dt> +<dt><span class="section"><a href="limits/how_to_tell.html">How to + Determine the Kind of a Number From <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code></a></span></dt> +</dl></div> +<p> + Boost.Multiprecision tries hard to implement <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code> + for all types as far as possible and meaningful because experience with Boost.Math + has shown that this aids portability. + </p> +<p> + The <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3690.pdf" target="_top">C++ + standard library</a> defines <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code> + in section 18.3.2. + </p> +<p> + This in turn refers to the C standard <a href="http://www.open-std.org/jtc1/sc22/wg11/docs/n507.pdf" target="_top">SC22/WG11 + N507 DRAFT INTERNATIONAL ISO/IEC STANDARD WD 10967-1</a> Information + technology Language independent arithmetic Part 1: Integer and Floating point + arithmetic. + </p> +<p> + That C Standard in turn refers to + </p> +<p> + <a href="http://754r.ucbtest.org/standards/754.pdf" target="_top">IEEE754 IEEE Standard + for Binary Floating-Point Arithmetic</a> + </p> +<p> + There is a useful summary at <a href="http://www.cplusplus.com/reference/limits/numeric_limits/" target="_top">C++ + reference</a>. + </p> +<p> + The chosen backend often determines how completely <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code> + is available. + </p> +<p> + Compiler options, processor type, and definition of macros or assembler instructions + to control denormal numbers will alter the values in the tables given below. + </p> +<div class="warning"><table border="0" summary="Warning"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../../../doc/src/images/warning.png"></td> +<th align="left">Warning</th> +</tr> +<tr><td align="left" valign="top"><p> + GMP's <code class="computeroutput"><span class="identifier">mpf_t</span></code> does not have + a concept of overflow: operations that lead to overflow eventually run + of out of resources and terminate with stack overflow (often after several + seconds). + </p></td></tr> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="serial.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="limits/constants.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/constants.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/constants.html new file mode 100644 index 0000000000..2a085c9ad8 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/constants.html @@ -0,0 +1,705 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>std::numeric_limits<> constants</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../limits.html" title="Numeric Limits"> +<link rel="prev" href="../limits.html" title="Numeric Limits"> +<link rel="next" href="functions.html" title="std::numeric_limits<> functions"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../limits.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../limits.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="functions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.limits.constants"></a><a class="link" href="constants.html" title="std::numeric_limits<> constants">std::numeric_limits<> + constants</a> +</h4></div></div></div> +<h5> +<a name="boost_multiprecision.tut.limits.constants.h0"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.is_specialized"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.is_specialized">is_specialized</a> + </h5> +<p> + <code class="computeroutput"><span class="keyword">true</span></code> for all arithmetic types + (integer, floating and fixed-point) for which <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">T</span><span class="special">>::</span><span class="identifier">numeric_limits</span></code> + is specialized. + </p> +<p> + A typical test is + </p> +<pre class="programlisting"><span class="keyword">if</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">T</span><span class="special">>::</span><span class="identifier">is_specialized</span> <span class="special">==</span> <span class="keyword">false</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"type "</span> <span class="special"><<</span> <span class="keyword">typeid</span><span class="special">(</span><span class="identifier">T</span><span class="special">).</span><span class="identifier">name</span><span class="special">()</span> <span class="special"><<</span> <span class="string">" is not specialized for std::numeric_limits!"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +<span class="comment">// ...</span> +<span class="special">}</span> +</pre> +<p> + Typically <code class="computeroutput"><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">is_specialized</span></code> + is <code class="computeroutput"><span class="keyword">true</span></code> for all <code class="computeroutput"><span class="identifier">T</span></code> where the compile-time constant members + of <code class="computeroutput"><span class="identifier">numeric_limits</span></code> are indeed + known at compile time, and don't vary at runtime. For example floating + point types with runtime-variable precision such as <code class="computeroutput"><span class="identifier">mpfr_float</span></code> + have no <code class="computeroutput"><span class="identifier">numeric_limits</span></code> + specialization as it would be impossible to define all the members at compile + time. In contrast the precision of a type such as <code class="computeroutput"><span class="identifier">mpfr_float_50</span></code> + is known at compile time, and so it <span class="emphasis"><em>does</em></span> have a <code class="computeroutput"><span class="identifier">numeric_limits</span></code> specialization. + </p> +<p> + Note that not all the <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code> + member constants and functions are meaningful for all user-defined types + (UDT), such as the decimal and binary multiprecision types provided here. + More information on this is given in the sections below. + </p> +<h5> +<a name="boost_multiprecision.tut.limits.constants.h1"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.infinity"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.infinity">infinity</a> + </h5> +<p> + For floating-point types, ∞ is defined wherever possible, but clearly infinity + is meaningless for __arbitrary_precision arithmetic backends, and there + is one floating point type (GMP's <code class="computeroutput"><span class="identifier">mpf_t</span></code>, + see <a class="link" href="../floats/gmp_float.html" title="gmp_float">gmp_float</a>) + which has no notion of infinity or NaN at all. + </p> +<p> + A typical test whether infinity is implemented is + </p> +<pre class="programlisting"><span class="keyword">if</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">T</span><span class="special">>::</span><span class="identifier">has_infinity</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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">T</span><span class="special">>::</span><span class="identifier">infinity</span><span class="special">()</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + and using tests like this is strongly recommended to improve portability. + </p> +<p> + If the backend is switched to a type that does not support infinity then, + without checks like this, there will be trouble. + </p> +<h5> +<a name="boost_multiprecision.tut.limits.constants.h2"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.is_signed"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.is_signed">is_signed</a> + </h5> +<p> + <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">T</span><span class="special">>::</span><span class="identifier">is_signed</span> <span class="special">==</span> + <span class="keyword">true</span></code> if the type <code class="computeroutput"><span class="identifier">T</span></code> + is signed. + </p> +<p> + For built-in binary types, the sign is held in a single bit, but for other + types (cpp_dec_float and cpp_bin_float) it may be a separate storage element, + usually <code class="computeroutput"><span class="keyword">bool</span></code>. + </p> +<h5> +<a name="boost_multiprecision.tut.limits.constants.h3"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.is_exact"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.is_exact">is_exact</a> + </h5> +<p> + <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">T</span><span class="special">>::</span><span class="identifier">is_exact</span> <span class="special">==</span> + <span class="keyword">true</span></code> if type T uses exact representations. + </p> +<p> + This is defined as <code class="computeroutput"><span class="keyword">true</span></code> for + all integer types and <code class="computeroutput"><span class="keyword">false</span></code> + for floating-point types. + </p> +<p> + <a href="http://stackoverflow.com/questions/14203654/stdnumeric-limitsis-exact-what-is-a-usable-definition" target="_top">A + usable definition</a> has been discussed. + </p> +<p> + ISO/IEC 10967-1, Language independent arithmetic, noted by the C++ Standard + defines + </p> +<pre class="programlisting"><span class="identifier">A</span> <span class="identifier">floating</span> <span class="identifier">point</span> <span class="identifier">type</span> <span class="identifier">F</span> <span class="identifier">shall</span> <span class="identifier">be</span> <span class="identifier">a</span> <span class="identifier">finite</span> <span class="identifier">subset</span> <span class="identifier">of</span> <span class="special">[</span><span class="identifier">real</span><span class="special">].</span> +</pre> +<p> + The important practical distinction is that all integers (up to <code class="computeroutput"><span class="identifier">max</span><span class="special">()</span></code>) + can be stored exactly. + </p> +<p> + <a href="http://en.wikipedia.org/wiki/Rational_number" target="_top">Rational</a> + types using two integer types are also exact. + </p> +<p> + Floating-point types <span class="bold"><strong>cannot store all real values</strong></span> + (those in the set of ℜ) <span class="bold"><strong>exactly</strong></span>. For example, + 0.5 can be stored exactly in a binary floating-point, but 0.1 cannot. What + is stored is the nearest representable real value, that is, rounded to + nearest. + </p> +<p> + Fixed-point types (usually decimal) are also defined as exact, in that + they only store a <span class="bold"><strong>fixed precision</strong></span>, so + half cents or pennies (or less) cannot be stored. The results of computations + are rounded up or down, just like the result of integer division stored + as an integer result. + </p> +<p> + There are number of proposals to <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3407.html" target="_top">add + Decimal Floating Point Support to C++</a>. + </p> +<p> + <a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2849.pdf" target="_top">Decimal + TR</a>. + </p> +<p> + And also <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3352.html" target="_top">C++ + Binary Fixed-Point Arithmetic</a>. + </p> +<h5> +<a name="boost_multiprecision.tut.limits.constants.h4"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.is_bounded"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.is_bounded">is_bounded</a> + </h5> +<p> + <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">T</span><span class="special">>::</span><span class="identifier">is_bounded</span> <span class="special">==</span> + <span class="keyword">true</span></code> if the set of values represented + by the type <code class="computeroutput"><span class="identifier">T</span></code> is finite. + </p> +<p> + This is <code class="computeroutput"><span class="keyword">true</span></code> for all built-in + integer, fixed and floating-point types, and most multi-precision types. + </p> +<p> + It is only <code class="computeroutput"><span class="keyword">false</span></code> for a few + __arbitrary_precision types like <code class="computeroutput"><span class="identifier">cpp_int</span></code>. + </p> +<p> + Rational and fixed-exponent representations are exact but not integer. + </p> +<h5> +<a name="boost_multiprecision.tut.limits.constants.h5"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.is_modulo"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.is_modulo">is_modulo</a> + </h5> +<p> + <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">T</span><span class="special">>::</span><span class="identifier">is_modulo</span></code> is defined as <code class="computeroutput"><span class="keyword">true</span></code> if adding two positive values of type + T can yield a result less than either value. + </p> +<p> + <code class="computeroutput"><span class="identifier">is_modulo</span> <span class="special">==</span> + <span class="keyword">true</span></code> means that the type does not + overflow, but, for example, 'wraps around' to zero, when adding one to + the <code class="computeroutput"><span class="identifier">max</span><span class="special">()</span></code> + value. + </p> +<p> + For most built-in integer types, <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">is_modulo</span></code> + is <code class="computeroutput"><span class="keyword">true</span></code>. + </p> +<p> + <code class="computeroutput"><span class="keyword">bool</span></code> is the only exception. + </p> +<p> + The modulo behaviour is sometimes useful, but also can be unexpected, and + sometimes undesired, behaviour. + </p> +<p> + Overflow of signed integers can be especially unexpected, possibly causing + change of sign. + </p> +<p> + Boost.Multiprecision integer type <code class="computeroutput"><span class="identifier">cpp_int</span></code> + is not modulo because as an __arbitrary_precision types, it expands to + hold any value that the machine resources permit. + </p> +<p> + However fixed precision <a class="link" href="../ints/cpp_int.html" title="cpp_int">cpp_int</a>'s + may be modulo if they are unchecked (i.e. they behave just like built in + integers), but not if they are checked (overflow causes an exception to + be raised). + </p> +<p> + Built-in and multi-precision floating-point types are normally not modulo. + </p> +<p> + Where possible, overflow is to <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">infinity</span><span class="special">()</span></code>, provided <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">has_infinity</span> + <span class="special">==</span> <span class="keyword">true</span></code>. + </p> +<h5> +<a name="boost_multiprecision.tut.limits.constants.h6"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.radix"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.radix">radix</a> + </h5> +<p> + Constant <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">T</span><span class="special">>::</span><span class="identifier">radix</span></code> returns either 2 (for built-in + and binary types) or 10 (for decimal types). + </p> +<h5> +<a name="boost_multiprecision.tut.limits.constants.h7"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.digits"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.digits">digits</a> + </h5> +<p> + The number of <code class="computeroutput"><span class="identifier">radix</span></code> digits + that be represented without change: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + for integer types, the number of <span class="bold"><strong>non-sign bits</strong></span> + in the significand. + </li> +<li class="listitem"> + for floating types, the number of <span class="bold"><strong>radix digits</strong></span> + in the significand. + </li> +</ul></div> +<p> + The values include any implicit bit, so for example, for the ubiquious + <code class="computeroutput"><span class="keyword">double</span></code> using 64 bits (<a href="http://en.wikipedia.org/wiki/Double_precision_floating-point_format" target="_top">IEEE + binary64 </a>), <code class="computeroutput"><span class="identifier">digits</span></code> + == 53, even though there are only 52 actual bits of the significand stored + in the representation. The value of <code class="computeroutput"><span class="identifier">digits</span></code> + reflects the fact that there is one implicit bit which is always set to + 1. + </p> +<p> + The Boost.Multiprecision binary types do not use an implicit bit, so the + <code class="computeroutput"><span class="identifier">digits</span></code> member reflects + exactly how many bits of precision were requested: + </p> +<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_bin_float</span><span class="special"><</span><span class="number">53</span><span class="special">,</span> <span class="identifier">digit_base_2</span><span class="special">></span> <span class="special">></span> <span class="identifier">float64</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_bin_float</span><span class="special"><</span><span class="number">113</span><span class="special">,</span> <span class="identifier">digit_base_2</span><span class="special">></span> <span class="special">></span> <span class="identifier">float128</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">float64</span><span class="special">>::</span><span class="identifier">digits</span> <span class="special">==</span> <span class="number">53.</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">float128</span><span class="special">>::</span><span class="identifier">digits</span> <span class="special">==</span> <span class="number">113.</span> +</pre> +<p> + For the most common case of <code class="computeroutput"><span class="identifier">radix</span> + <span class="special">==</span> <span class="number">2</span></code>, + <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">T</span><span class="special">>::</span><span class="identifier">digits</span></code> is the number of bits in the representation, + not counting any sign bit. + </p> +<p> + For a decimal integer type, when <code class="computeroutput"><span class="identifier">radix</span> + <span class="special">==</span> <span class="number">10</span></code>, + it is the number of decimal digits. + </p> +<h5> +<a name="boost_multiprecision.tut.limits.constants.h8"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.digits10"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.digits10">digits10</a> + </h5> +<p> + Constant <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">T</span><span class="special">>::</span><span class="identifier">digits10</span></code> returns the number of decimal + digits that can be represented without change or loss. + </p> +<p> + For example, <code class="computeroutput"><span class="identifier">numeric_limits</span><span class="special"><</span><span class="keyword">unsigned</span> <span class="keyword">char</span><span class="special">>::</span><span class="identifier">digits10</span></code> is 2. + </p> +<p> + This somewhat inscrutable definition means that an <code class="computeroutput"><span class="keyword">unsigned</span> + <span class="keyword">char</span></code> can hold decimal values <code class="computeroutput"><span class="number">0.</span><span class="special">.</span><span class="number">99</span></code> + without loss of precision or accuracy, usually from truncation. + </p> +<p> + Had the definition been 3 then that would imply it could hold 0..999, but + as we all know, an 8-bit <code class="computeroutput"><span class="keyword">unsigned</span> + <span class="keyword">char</span></code> can only hold 0..255, and an + attempt to store 256 or more will involve loss or change. + </p> +<p> + For bounded integers, it is thus <span class="bold"><strong>one less</strong></span> + than number of decimal digits you need to display the biggest integer + <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">T</span><span class="special">>::</span><span class="identifier">max</span><span class="special">()</span></code>. + This value can be used to predict the layout width required for + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setw</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="keyword">short</span><span class="special">>::</span><span class="identifier">digits10</span> <span class="special">+</span><span class="number">1</span> <span class="special">+</span><span class="number">1</span><span class="special">)</span> <span class="comment">// digits10+1, and +1 for sign.</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">showpos</span> <span class="special"><<</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="keyword">short</span><span class="special">>::</span><span class="identifier">max</span><span class="special">)()</span> <span class="comment">// +32767</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setw</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="keyword">short</span><span class="special">>::</span><span class="identifier">digits10</span> <span class="special">+</span><span class="number">1</span> <span class="special">+</span><span class="number">1</span><span class="special">)</span> + <span class="special"><<</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="keyword">short</span><span class="special">>::</span><span class="identifier">min</span><span class="special">)()</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// -32767</span> +</pre> +<p> + For example, <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">short</span></code> + is often stored in 16 bits, so the maximum value is 0xFFFF or 65535. + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setw</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="keyword">unsigned</span> <span class="keyword">short</span><span class="special">>::</span><span class="identifier">digits10</span> <span class="special">+</span><span class="number">1</span> <span class="special">+</span><span class="number">1</span><span class="special">)</span> <span class="comment">// digits10+1, and +1 for sign.</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">showpos</span> <span class="special"><<</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="keyword">unsigned</span> <span class="keyword">short</span><span class="special">>::</span><span class="identifier">max</span><span class="special">)()</span> <span class="comment">// 65535</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setw</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="keyword">unsigned</span> <span class="keyword">short</span><span class="special">>::</span><span class="identifier">digits10</span> <span class="special">+</span><span class="number">1</span> <span class="special">+</span><span class="number">1</span><span class="special">)</span> <span class="comment">// digits10+1, and +1 for sign.</span> + <span class="special"><<</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="keyword">unsigned</span> <span class="keyword">short</span><span class="special">>::</span><span class="identifier">min</span><span class="special">)()</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 0</span> +</pre> +<p> + For bounded floating-point types, if we create a <code class="computeroutput"><span class="keyword">double</span></code> + with a value with <code class="computeroutput"><span class="identifier">digits10</span></code> + (usually 15) decimal digits, <code class="computeroutput"><span class="number">1e15</span></code> + or <code class="computeroutput"><span class="number">1000000000000000</span></code> : + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</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="keyword">double</span><span class="special">>::</span><span class="identifier">max_digits10</span><span class="special">);</span> +<span class="keyword">double</span> <span class="identifier">d</span> <span class="special">=</span> <span class="number">1e15</span><span class="special">;</span> +<span class="keyword">double</span> <span class="identifier">dp1</span> <span class="special">=</span> <span class="identifier">d</span><span class="special">+</span><span class="number">1</span><span class="special">;</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">d</span> <span class="special"><<</span> <span class="string">"\n"</span> <span class="special"><<</span> <span class="identifier">dp1</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +<span class="comment">// 1000000000000000</span> +<span class="comment">// 1000000000000001</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">dp1</span> <span class="special">-</span> <span class="identifier">d</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 1</span> +</pre> +<p> + and we can increment this value to <code class="computeroutput"><span class="number">1000000000000001</span></code> + as expected and show the difference too. + </p> +<p> + But if we try to repeat this with more than <code class="computeroutput"><span class="identifier">digits10</span></code> + digits, + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</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="keyword">double</span><span class="special">>::</span><span class="identifier">max_digits10</span><span class="special">);</span> +<span class="keyword">double</span> <span class="identifier">d</span> <span class="special">=</span> <span class="number">1e16</span><span class="special">;</span> +<span class="keyword">double</span> <span class="identifier">dp1</span> <span class="special">=</span> <span class="identifier">d</span><span class="special">+</span><span class="number">1</span><span class="special">;</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">d</span> <span class="special"><<</span> <span class="string">"\n"</span> <span class="special"><<</span> <span class="identifier">dp1</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +<span class="comment">// 10000000000000000</span> +<span class="comment">// 10000000000000000</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">dp1</span> <span class="special">-</span> <span class="identifier">d</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 0 !!!</span> +</pre> +<p> + then we find that when we add one it has no effect, and display show that + there is loss of precision. See <a href="http://en.wikipedia.org/wiki/Loss_of_significance" target="_top">Loss + of significance or cancellation error</a>. + </p> +<p> + So <code class="computeroutput"><span class="identifier">digits10</span></code> is the number + of decimal digits <span class="bold"><strong>guaranteed</strong></span> to be correct. + </p> +<p> + For example, 'round-tripping' for <code class="computeroutput"><span class="keyword">double</span></code>: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + If a decimal string with at most <code class="computeroutput"><span class="identifier">digits10</span></code>( + == 15) significant decimal digits is converted to <code class="computeroutput"><span class="keyword">double</span></code> + and then converted back to the same number of significant decimal digits, + then the final string will match the original 15 decimal digit string. + </li> +<li class="listitem"> + If a <code class="computeroutput"><span class="keyword">double</span></code> floating-point + number is converted to a decimal string with at least 17 decimal digits + and then converted back to <code class="computeroutput"><span class="keyword">double</span></code>, + then the result will be binary identical to the original <code class="computeroutput"><span class="keyword">double</span></code> value. + </li> +</ul></div> +<p> + For most purposes, you will much more likely want <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">max_digits10</span></code>, + the number of decimal digits that ensure that a change of one least significant + bit (ULP) produces a different decimal digits string. + </p> +<p> + For nearly all floating-point types, <code class="computeroutput"><span class="identifier">max_digits10</span></code> + is <code class="computeroutput"><span class="identifier">digits10</span><span class="special">+</span><span class="number">2</span></code>, but you should use <code class="computeroutput"><span class="identifier">max_digits10</span></code> + where possible. + </p> +<p> + If <code class="computeroutput"><span class="identifier">max_digits10</span></code> is not + available, you should using the <a href="http://www.cs.berkeley.edu/~wkahan/ieee754status/IEEE754.PDF" target="_top">Kahan + formula for floating-point type T</a> + </p> +<pre class="programlisting"><span class="identifier">max_digits10</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">T</span><span class="special">>::</span><span class="identifier">digits</span> <span class="special">*</span> <span class="number">3010U</span><span class="special">/</span><span class="number">10000U</span><span class="special">;</span> +</pre> +<p> + The factor is log<sub>10</sub>(2) = 0.3010 but must be evaluated at compile time using + only integers. + </p> +<p> + (See also <a href="http://www.loria.fr/~zimmerma/mca/mca-cup-0.5.9.pdf" target="_top">Richard + P. Brent and Paul Zimmerman, Modern Computer Arithmetic</a> Equation + 3.8 on page 116.). + </p> +<p> + The extra two (or 3) least significant digits are 'noisy' and may be junk, + but if you want to 'round-trip' - printing a value out and reading it back + in - you must use <code class="computeroutput"><span class="identifier">os</span><span class="special">.</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">T</span><span class="special">>::</span><span class="identifier">max_digits10</span><span class="special">)</span></code>. + For at least one popular compiler, you must also use <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">scientific</span></code> + format. + </p> +<h5> +<a name="boost_multiprecision.tut.limits.constants.h9"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.max_digits10"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.max_digits10">max_digits10</a> + </h5> +<p> + <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">T</span><span class="special">>::</span><span class="identifier">max_digits10</span></code> was added for floating-point + because <code class="computeroutput"><span class="identifier">digits10</span></code> decimal + digits are insufficient to show a least significant bit (ULP) change giving + puzzling displays like + </p> +<pre class="programlisting"><span class="number">0.666666666666667</span> <span class="special">!=</span> <span class="number">0.666666666666667</span> +</pre> +<p> + from failure to 'round-trip', for example: + </p> +<pre class="programlisting"><span class="keyword">double</span> <span class="identifier">write</span> <span class="special">=</span> <span class="number">2.</span><span class="special">/</span><span class="number">3</span><span class="special">;</span> <span class="comment">// Any arbitrary value that cannot be represented exactly.</span> +<span class="keyword">double</span> <span class="identifier">read</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">stringstream</span> <span class="identifier">s</span><span class="special">;</span> +<span class="identifier">s</span><span class="special">.</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="keyword">double</span><span class="special">>::</span><span class="identifier">digits10</span><span class="special">);</span> <span class="comment">// or `float64_t` for 64-bit IEE754 double.</span> +<span class="identifier">s</span> <span class="special"><<</span> <span class="identifier">write</span><span class="special">;</span> +<span class="identifier">s</span> <span class="special">>></span> <span class="identifier">read</span><span class="special">;</span> +<span class="keyword">if</span><span class="special">(</span><span class="identifier">read</span> <span class="special">!=</span> <span class="identifier">write</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</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="keyword">double</span><span class="special">>::</span><span class="identifier">digits10</span><span class="special">)</span> + <span class="special"><<</span> <span class="identifier">read</span> <span class="special"><<</span> <span class="string">" != "</span> <span class="special"><<</span> <span class="identifier">write</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + If you wish to ensure that a change of one least significant bit (ULP) + produces a different decimal digits string, then <code class="computeroutput"><span class="identifier">max_digits10</span></code> + is the precision to use. + </p> +<p> + For example: + </p> +<pre class="programlisting"><span class="keyword">double</span> <span class="identifier">pi</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">double_constants</span><span class="special">::</span><span class="identifier">pi</span><span class="special">;</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</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="keyword">double</span><span class="special">>::</span><span class="identifier">max_digits10</span><span class="special">);</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">pi</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 3.1415926535897931</span> +</pre> +<p> + will display π to the maximum possible precision using a <code class="computeroutput"><span class="keyword">double</span></code>. + </p> +<p> + and similarly for a much higher precision type: + </p> +<pre class="programlisting"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_dec_float</span><span class="special"><</span><span class="number">50</span><span class="special">></span> <span class="special">></span> <span class="identifier">cpp_dec_float_50</span><span class="special">;</span> <span class="comment">// 50 decimal digits.</span> + +<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_dec_float_50</span><span class="special">;</span> + +<span class="identifier">cpp_dec_float_50</span> <span class="identifier">pi</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_dec_float_50</span><span class="special">>();</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</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_dec_float_50</span><span class="special">>::</span><span class="identifier">max_digits10</span><span class="special">);</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">pi</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +<span class="comment">// 3.141592653589793238462643383279502884197169399375105820974944592307816406</span> +</pre> +<p> + For integer types, <code class="computeroutput"><span class="identifier">max_digits10</span></code> + is implementation-dependant, but is usually <code class="computeroutput"><span class="identifier">digits10</span> + <span class="special">+</span> <span class="number">2</span></code>. + This is the output field width required for the maximum value of the type + T <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">T</span><span class="special">>::</span><span class="identifier">max</span><span class="special">()</span></code> + including a sign and a space. + </p> +<p> + So this will produce neat columns. + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setw</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="keyword">int</span><span class="special">>::</span><span class="identifier">max_digits10</span><span class="special">)</span> <span class="special">...</span> +</pre> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + For Microsoft Visual Studio 2010, <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="keyword">float</span><span class="special">>::</span><span class="identifier">max_digits10</span></code> + is wrongly defined as 8. It should be 9. + </p></td></tr> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"> +<p> + For Microsoft Visual Studio, and default float format, a small range + of values approximately 0.0001 to 0.004, with exponent values of 3f2 + to 3f6, are wrongly input by one least significant bit, probably every + third value of significand. + </p> +<p> + A workaround is using scientific or exponential format <code class="computeroutput"><span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">scientific</span></code>. + </p> +</td></tr> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + BOOST_NO_CXX11_NUMERIC_LIMITS is a suitable feature-test macro to determine + if <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="keyword">float</span><span class="special">>::</span><span class="identifier">max_digits10</span></code> is implemented on any + platform. If <code class="computeroutput"><span class="identifier">max_digits10</span></code> + is not available, you should using the <a href="http://www.cs.berkeley.edu/~wkahan/ieee754status/IEEE754.PDF" target="_top">Kahan + formula for floating-point type T</a>. See above. + </p></td></tr> +</table></div> +<p> + For example, to be portable, including older platforms: + </p> +<pre class="programlisting"> <span class="keyword">typedef</span> <span class="keyword">float</span> <span class="identifier">T</span><span class="special">;</span> <span class="comment">// Any type: `double`, cpp_dec_float_50, bin_128bit_double_type ...</span> + +<span class="preprocessor">#if</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_NO_CXX11_NUMERIC_LIMITS</span><span class="special">)</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</span><span class="identifier">precision</span><span class="special">(</span><span class="number">2</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">T</span><span class="special">>::</span><span class="identifier">digits</span> <span class="special">*</span> <span class="number">3010U</span><span class="special">/</span><span class="number">10000U</span><span class="special">);</span> +<span class="preprocessor">#else</span> +<span class="preprocessor"># if</span> <span class="special">(</span><span class="identifier">_MSC_VER</span> <span class="special"><=</span> <span class="number">1600</span><span class="special">)</span> <span class="comment">// Correct wrong value for float.</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</span><span class="identifier">precision</span><span class="special">(</span><span class="number">2</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">T</span><span class="special">>::</span><span class="identifier">digits</span> <span class="special">*</span> <span class="number">3010U</span><span class="special">/</span><span class="number">10000U</span><span class="special">);</span> +<span class="preprocessor"># else</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</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">T</span><span class="special">>::</span><span class="identifier">max_digits10</span><span class="special">);</span> +<span class="preprocessor"># endif</span> +<span class="preprocessor">#endif</span> + + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"std::cout.precision = "</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</span><span class="identifier">precision</span><span class="special">()</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + + <span class="keyword">double</span> <span class="identifier">x</span> <span class="special">=</span> <span class="number">1.2345678901234567889</span><span class="special">;</span> + + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"x = "</span> <span class="special"><<</span> <span class="identifier">x</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">//</span> +</pre> +<p> + which should output: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</span><span class="identifier">precision</span> <span class="special">=</span> <span class="number">9</span> +<span class="identifier">x</span> <span class="special">=</span> <span class="number">1.23456789</span> +</pre> +<h5> +<a name="boost_multiprecision.tut.limits.constants.h10"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.round_style"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.round_style">round_style</a> + </h5> +<p> + The rounding style determines how the result of floating-point operations + is treated when the result cannot be <span class="bold"><strong>exactly represented</strong></span> + in the significand. Various rounding modes may be provided: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + round to nearest up or down (default for floating-point types). + </li> +<li class="listitem"> + round up (toward positive infinity). + </li> +<li class="listitem"> + round down (toward negative infinity). + </li> +<li class="listitem"> + round toward zero (integer types). + </li> +<li class="listitem"> + no rounding (if decimal radix). + </li> +<li class="listitem"> + rounding mode is not determinable. + </li> +</ul></div> +<p> + For integer types, <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">T</span><span class="special">>::</span><span class="identifier">round_style</span></code> + is always towards zero, so + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">round_style</span> <span class="special">==</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">round_to_zero</span><span class="special">;</span> +</pre> +<p> + A decimal type, <code class="computeroutput"><span class="identifier">cpp_dec_float</span></code> + rounds in no particular direction, which is to say it doesn't round at + all. And since there are several guard digits, it's not really the same + as truncation (round toward zero) either. + </p> +<p> + For floating-point types, it is normal to round to nearest. + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">round_style</span> <span class="special">==</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">round_to_nearest</span><span class="special">;</span> +</pre> +<p> + See function <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">T</span><span class="special">>::</span><span class="identifier">round_error</span></code> for the maximum error (in + ULP) that rounding can cause. + </p> +<h5> +<a name="boost_multiprecision.tut.limits.constants.h11"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.has_denorm_loss"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.has_denorm_loss">has_denorm_loss</a> + </h5> +<p> + <code class="computeroutput"><span class="keyword">true</span></code> if a loss of precision + is detected as a <a href="http://en.wikipedia.org/wiki/Denormalization" target="_top">denormalization</a> + loss, rather than an inexact result. + </p> +<p> + Always <code class="computeroutput"><span class="keyword">false</span></code> for integer types. + </p> +<p> + <code class="computeroutput"><span class="keyword">false</span></code> for all types which + do not have <code class="computeroutput"><span class="identifier">has_denorm</span></code> + == <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">denorm_present</span></code>. + </p> +<h5> +<a name="boost_multiprecision.tut.limits.constants.h12"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.denorm_style"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.denorm_style">denorm_style</a> + </h5> +<p> + <a href="http://en.wikipedia.org/wiki/Denormal_number" target="_top">Denormalized + values</a> are representations with a variable number of exponent bits + that can permit gradual underflow, so that, if type T is <code class="computeroutput"><span class="keyword">double</span></code>. + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">denorm_min</span><span class="special">()</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">T</span><span class="special">>::</span><span class="identifier">min</span><span class="special">()</span> +</pre> +<p> + A type may have any of the following <code class="computeroutput"><span class="keyword">enum</span> + <span class="identifier">float_denorm_style</span></code> values: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">denorm_absent</span></code>, if it does not allow + denormalized values. (Always used for all integer and exact types). + </li> +<li class="listitem"> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">denorm_present</span></code>, if the floating-point + type allows denormalized values. + </li> +<li class="listitem"> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">denorm_indeterminate</span></code>, if indeterminate + at compile time. + </li> +</ul></div> +<h5> +<a name="boost_multiprecision.tut.limits.constants.h13"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.constants.tinyness_before_rounding"></a></span><a class="link" href="constants.html#boost_multiprecision.tut.limits.constants.tinyness_before_rounding">Tinyness + before rounding</a> + </h5> +<p> + <code class="computeroutput"><span class="keyword">bool</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">tinyness_before</span></code> + </p> +<p> + <code class="computeroutput"><span class="keyword">true</span></code> if a type can determine + that a value is too small to be represent as a normalized value before + rounding it. + </p> +<p> + Generally true for <code class="computeroutput"><span class="identifier">is_iec559</span></code> + floating-point built-in types, but false for integer types. + </p> +<p> + Standard-compliant IEEE 754 floating-point implementations may detect the + floating-point underflow at three predefined moments: + </p> +<div class="orderedlist"><ol class="orderedlist" type="1"> +<li class="listitem"> + After computation of a result with absolute value smaller 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">T</span><span class="special">>::</span><span class="identifier">min</span><span class="special">()</span></code>, + such implementation detects <span class="emphasis"><em>tinyness before rounding</em></span> + (e.g. UltraSparc). + </li> +<li class="listitem"> + After rounding of the result to <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">T</span><span class="special">>::</span><span class="identifier">digits</span></code> + bits, if the result is tiny, such implementation detects <span class="emphasis"><em>tinyness + after rounding</em></span> (e.g. SuperSparc). + </li> +<li class="listitem"> + If the conversion of the rounded tiny result to subnormal form resulted + in the loss of precision, such implementation detects <span class="emphasis"><em>denorm + loss</em></span>. + </li> +</ol></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../limits.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../limits.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="functions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/functions.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/functions.html new file mode 100644 index 0000000000..7e8cbc7c67 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/functions.html @@ -0,0 +1,534 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>std::numeric_limits<> functions</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../limits.html" title="Numeric Limits"> +<link rel="prev" href="constants.html" title="std::numeric_limits<> constants"> +<link rel="next" href="limits32.html" title="Numeric limits for 32-bit platform"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="constants.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../limits.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="limits32.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.limits.functions"></a><a class="link" href="functions.html" title="std::numeric_limits<> functions">std::numeric_limits<> + functions</a> +</h4></div></div></div> +<h5> +<a name="boost_multiprecision.tut.limits.functions.h0"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.functions.max_function"></a></span><a class="link" href="functions.html#boost_multiprecision.tut.limits.functions.max_function">max function</a> + </h5> +<p> + Function <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">T</span><span class="special">>::</span><span class="identifier">max</span><span class="special">()</span></code> + returns the largest finite value that can be represented by the type T. + If there is no such value (and <code class="computeroutput"><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">bounded</span></code> + is <code class="computeroutput"><span class="keyword">false</span></code>) then returns <code class="computeroutput"><span class="identifier">T</span><span class="special">()</span></code>. + </p> +<p> + For built-in types there is usually a corresponding MACRO value TYPE_MAX, + where TYPE is CHAR, INT, FLOAT etc. + </p> +<p> + Other types, including those provided by a typedef, for example <code class="computeroutput"><span class="identifier">INT64_T_MAX</span></code> for <code class="computeroutput"><span class="identifier">int64_t</span></code>, + may provide a macro definition. + </p> +<p> + To cater for situations where no <code class="computeroutput"><span class="identifier">numeric_limits</span></code> + specialization is available (for example because the precision of the type + varies at runtime), packaged versions of this (and other functions) are + provided using + </p> +<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">tools</span><span class="special">/</span><span class="identifier">precision</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> + +<span class="identifier">T</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">tools</span><span class="special">::</span><span class="identifier">max_value</span><span class="special"><</span><span class="identifier">T</span><span class="special">>();</span> +</pre> +<p> + Of course, these simply use <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">T</span><span class="special">>::</span><span class="identifier">max</span><span class="special">()</span></code> if available, but otherwise 'do something + sensible'. + </p> +<h5> +<a name="boost_multiprecision.tut.limits.functions.h1"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.functions.lowest_function"></a></span><a class="link" href="functions.html#boost_multiprecision.tut.limits.functions.lowest_function">lowest + function</a> + </h5> +<p> + Since C++11: <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">T</span><span class="special">>::</span><span class="identifier">lowest</span><span class="special">()</span></code> + is + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + For integral types, the same as function <code class="computeroutput"><span class="identifier">min</span><span class="special">()</span></code>. + </li> +<li class="listitem"> + For floating-point types, generally the negative of <code class="computeroutput"><span class="identifier">max</span><span class="special">()</span></code> (but implementation-dependent). + </li> +</ul></div> +<pre class="programlisting"><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="keyword">double</span><span class="special">>::</span><span class="identifier">max</span><span class="special">)()</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="keyword">double</span><span class="special">>::</span><span class="identifier">lowest</span><span class="special">();</span> +</pre> +<h5> +<a name="boost_multiprecision.tut.limits.functions.h2"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.functions.min_function"></a></span><a class="link" href="functions.html#boost_multiprecision.tut.limits.functions.min_function">min function</a> + </h5> +<p> + Function <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">T</span><span class="special">>::</span><span class="identifier">min</span><span class="special">()</span></code> + returns the minimum finite value that can be represented by the type T. + </p> +<p> + For built-in types there is usually a corresponding MACRO value TYPE_MIN, + where TYPE is CHAR, INT, FLOAT etc. + </p> +<p> + Other types, including those provided by a typedef, for example <code class="computeroutput"><span class="identifier">INT64_T_MIN</span></code> for <code class="computeroutput"><span class="identifier">int64_t</span></code>, + may provide a macro definition. + </p> +<p> + For floating-point types, it is more fully defined as the <span class="emphasis"><em>minimum + positive normalized value</em></span>. + </p> +<p> + See <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">T</span><span class="special">>::</span><span class="identifier">denorm_min</span><span class="special">()</span></code> + for the smallest denormalized value, provided + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">has_denorm</span> <span class="special">==</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">denorm_present</span> +</pre> +<p> + To cater for situations where no <code class="computeroutput"><span class="identifier">numeric_limits</span></code> + specialization is available (for example because the precision of the type + varies at runtime), packaged versions of this (and other functions) are + provided using + </p> +<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">tools</span><span class="special">/</span><span class="identifier">precision</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> + +<span class="identifier">T</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">tools</span><span class="special">::</span><span class="identifier">min_value</span><span class="special"><</span><span class="identifier">T</span><span class="special">>();</span> +</pre> +<p> + Of course, these simply use <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">T</span><span class="special">>::</span><span class="identifier">min</span><span class="special">()</span></code> if available. + </p> +<h5> +<a name="boost_multiprecision.tut.limits.functions.h3"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.functions.denorm_min_function"></a></span><a class="link" href="functions.html#boost_multiprecision.tut.limits.functions.denorm_min_function">denorm_min + function</a> + </h5> +<p> + Function <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">T</span><span class="special">>::</span><span class="identifier">denorm_min</span><span class="special">()</span></code> + returns the smallest <a href="http://en.wikipedia.org/wiki/Denormal_number" target="_top">denormalized + value</a>, provided + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">has_denorm</span> <span class="special">==</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">denorm_present</span> +</pre> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</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="keyword">double</span><span class="special">>::</span><span class="identifier">max_digits10</span><span class="special">);</span> +<span class="keyword">if</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="keyword">double</span><span class="special">>::</span><span class="identifier">has_denorm</span> <span class="special">==</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">denorm_present</span><span class="special">)</span> +<span class="special">{</span> + <span class="keyword">double</span> <span class="identifier">d</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="keyword">double</span><span class="special">>::</span><span class="identifier">denorm_min</span><span class="special">();</span> + + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">d</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 4.9406564584124654e-324</span> + + <span class="keyword">int</span> <span class="identifier">exponent</span><span class="special">;</span> + + <span class="keyword">double</span> <span class="identifier">significand</span> <span class="special">=</span> <span class="identifier">frexp</span><span class="special">(</span><span class="identifier">d</span><span class="special">,</span> <span class="special">&</span><span class="identifier">exponent</span><span class="special">);</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"exponent = "</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">hex</span> <span class="special"><<</span> <span class="identifier">exponent</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// fffffbcf</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"significand = "</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">hex</span> <span class="special"><<</span> <span class="identifier">significand</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 0.50000000000000000</span> +<span class="special">}</span> +<span class="keyword">else</span> +<span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"No denormalization. "</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + The exponent is effectively reduced from -308 to -324 (though it remains + encoded as zero and leading zeros appear in the significand, thereby losing + precision until the significand reaches zero). + </p> +<h5> +<a name="boost_multiprecision.tut.limits.functions.h4"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.functions.round_error"></a></span><a class="link" href="functions.html#boost_multiprecision.tut.limits.functions.round_error">round_error</a> + </h5> +<p> + Function <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">T</span><span class="special">>::</span><span class="identifier">round_error</span><span class="special">()</span></code> + returns the maximum error (in units of <a href="http://en.wikipedia.org/wiki/Unit_in_the_last_place" target="_top">ULP</a>) + that can be caused by any basic arithmetic operation. + </p> +<pre class="programlisting"><span class="identifier">round_style</span> <span class="special">==</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">round_indeterminate</span><span class="special">;</span> +</pre> +<p> + The rounding style is indeterminable at compile time. + </p> +<p> + For floating-point types, when rounding is to nearest, only half a bit + is lost by rounding, and <code class="computeroutput"><span class="identifier">round_error</span> + <span class="special">==</span> <span class="number">0.5</span></code>. + In contrast when rounding is towards zero, or plus/minus infinity, we can + loose up to one bit from rounding, and <code class="computeroutput"><span class="identifier">round_error</span> + <span class="special">==</span> <span class="number">1</span></code>. + </p> +<p> + For integer types, rounding always to zero, so at worst almost one bit + can be rounded, so <code class="computeroutput"><span class="identifier">round_error</span> + <span class="special">==</span> <span class="number">1</span></code>. + </p> +<p> + <code class="computeroutput"><span class="identifier">round_error</span><span class="special">()</span></code> + can be used with <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">T</span><span class="special">>::</span><span class="identifier">epsilon</span><span class="special">()</span></code> + to estimate the maximum potential error caused by rounding. For typical + floating-point types, <code class="computeroutput"><span class="identifier">round_error</span><span class="special">()</span> <span class="special">=</span> <span class="number">1</span><span class="special">/</span><span class="number">2</span></code>, so half + epsilon is the maximum potential error. + </p> +<pre class="programlisting"><span class="keyword">double</span> <span class="identifier">round_err</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="keyword">double</span><span class="special">>::</span><span class="identifier">epsilon</span><span class="special">()</span> <span class="comment">// 2.2204460492503131e-016</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="keyword">double</span><span class="special">>::</span><span class="identifier">round_error</span><span class="special">();</span> <span class="comment">// 1/2</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">round_err</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 1.1102230246251565e-016</span> +</pre> +<p> + There are, of course, many occasions when much bigger loss of precision + occurs, for example, caused by <a href="http://en.wikipedia.org/wiki/Loss_of_significance" target="_top">Loss + of significance or cancellation error</a> or very many iterations. + </p> +<h5> +<a name="boost_multiprecision.tut.limits.functions.h5"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.functions.epsilon"></a></span><a class="link" href="functions.html#boost_multiprecision.tut.limits.functions.epsilon">epsilon</a> + </h5> +<p> + Function <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">T</span><span class="special">>::</span><span class="identifier">epsilon</span><span class="special">()</span></code> + is meaningful only for non-integral types. + </p> +<p> + It returns the difference between <code class="computeroutput"><span class="number">1.0</span></code> + and the next value representable by the floating-point type T. So it is + a one least-significant-bit change in this floating-point value. + </p> +<p> + For <code class="computeroutput"><span class="keyword">double</span></code> (<code class="computeroutput"><span class="identifier">float_64t</span></code>) it is <code class="computeroutput"><span class="number">2.2204460492503131e-016</span></code> + showing all possibly significant 17 decimal digits. + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</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="keyword">double</span><span class="special">>::</span><span class="identifier">max_digits10</span><span class="special">);</span> +<span class="keyword">double</span> <span class="identifier">d</span> <span class="special">=</span> <span class="number">1.</span><span class="special">;</span> +<span class="keyword">double</span> <span class="identifier">eps</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="keyword">double</span><span class="special">>::</span><span class="identifier">epsilon</span><span class="special">();</span> +<span class="keyword">double</span> <span class="identifier">dpeps</span> <span class="special">=</span> <span class="identifier">d</span><span class="special">+</span><span class="identifier">eps</span><span class="special">;</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">showpoint</span> <span class="comment">// Ensure all trailing zeros are shown.</span> + <span class="special"><<</span> <span class="identifier">d</span> <span class="special"><<</span> <span class="string">"\n"</span> <span class="comment">// 1.0000000000000000</span> + <span class="special"><<</span> <span class="identifier">dpeps</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 2.2204460492503131e-016</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">dpeps</span> <span class="special">-</span> <span class="identifier">d</span> <span class="comment">// 1.0000000000000002</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +</pre> +<p> + We can explicitly increment by one bit using the function <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">float_next</span><span class="special">()</span></code> + and the result is the same as adding <code class="computeroutput"><span class="identifier">epsilon</span></code>. + </p> +<pre class="programlisting"><span class="keyword">double</span> <span class="identifier">one</span> <span class="special">=</span> <span class="number">1.</span><span class="special">;</span> +<span class="keyword">double</span> <span class="identifier">nad</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">float_next</span><span class="special">(</span><span class="identifier">one</span><span class="special">);</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">nad</span> <span class="special"><<</span> <span class="string">"\n"</span> <span class="comment">// 1.0000000000000002</span> + <span class="special"><<</span> <span class="identifier">nad</span> <span class="special">-</span> <span class="identifier">one</span> <span class="comment">// 2.2204460492503131e-016</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +</pre> +<p> + Adding any smaller value, like half <code class="computeroutput"><span class="identifier">epsilon</span></code>, + will have no effect on this value. + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">.</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="keyword">double</span><span class="special">>::</span><span class="identifier">max_digits10</span><span class="special">);</span> +<span class="keyword">double</span> <span class="identifier">d</span> <span class="special">=</span> <span class="number">1.</span><span class="special">;</span> +<span class="keyword">double</span> <span class="identifier">eps</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="keyword">double</span><span class="special">>::</span><span class="identifier">epsilon</span><span class="special">();</span> +<span class="keyword">double</span> <span class="identifier">dpeps</span> <span class="special">=</span> <span class="identifier">d</span> <span class="special">+</span> <span class="identifier">eps</span><span class="special">/</span><span class="number">2</span><span class="special">;</span> + +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">showpoint</span> <span class="comment">// Ensure all trailing zeros are shown.</span> + <span class="special"><<</span> <span class="identifier">dpeps</span> <span class="special"><<</span> <span class="string">"\n"</span> <span class="comment">// 1.0000000000000000</span> + <span class="special"><<</span> <span class="identifier">eps</span><span class="special">/</span><span class="number">2</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 1.1102230246251565e-016</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">dpeps</span> <span class="special">-</span> <span class="identifier">d</span> <span class="comment">// 0.00000000000000000</span> + <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +</pre> +<p> + So this cancellation error leaves the values equal, despite adding half + <code class="computeroutput"><span class="identifier">epsilon</span></code>. + </p> +<p> + To achieve greater portability over platform and floating-point type, Boost.Math + and Boost.Multiprecion provide a package of functions that 'do something + sensible' if the standard <code class="computeroutput"><span class="identifier">numeric_limits</span></code> + is not available. To use these <code class="computeroutput"><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">tools</span><span class="special">/</span><span class="identifier">precision</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>. + </p> +<p> + A tolerance might be defined using this version of epsilon thus: + </p> +<pre class="programlisting"><span class="identifier">RealType</span> <span class="identifier">tolerance</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">tools</span><span class="special">::</span><span class="identifier">epsilon</span><span class="special"><</span><span class="identifier">RealType</span><span class="special">>()</span> <span class="special">*</span> <span class="number">2</span><span class="special">;</span> +</pre> +<h6> +<a name="boost_multiprecision.tut.limits.functions.h6"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.functions.tolerance_for_floating_point_com"></a></span><a class="link" href="functions.html#boost_multiprecision.tut.limits.functions.tolerance_for_floating_point_com">Tolerance + for Floating-point Comparisons</a> + </h6> +<p> + <code class="computeroutput"><span class="identifier">epsilon</span></code> is very useful + to compute a tolerance when comparing floating-point values, a much more + difficult task than is commonly imagined. + </p> +<p> + For more information you probably want (but still need) see <a href="http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html" target="_top">What + Every Computer Scientist Should Know About Floating-Point Arithmetic</a> + </p> +<p> + The naive test comparing the absolute difference between two values and + a tolerance does not give useful results if the values are too large or + too small. + </p> +<p> + So Boost.Test uses an algorithm first devised by Knuth for reliably checking + if floating-point values are close enough. + </p> +<p> + See Donald. E. Knuth. The art of computer programming (vol II). Copyright + 1998 Addison-Wesley Longman, Inc., 0-201-89684-2. Addison-Wesley Professional; + 3rd edition. + </p> +<p> + See also: + </p> +<p> + <a href="http://adtmag.com/articles/2000/03/15/comparing-floats-how-to-determine-if-floating-quantities-are-close-enough-once-a-tolerance-has-been.aspx" target="_top">Alberto + Squassia, Comparing floats</a> + </p> +<p> + <a href="http://adtmag.com/articles/2000/03/16/comparing-floats-how-to-determine-if-floating-quantities-are-close-enough-once-a-tolerance-has-been.aspx" target="_top">Alberto + Squassia, Comparing floats code</a> + </p> +<p> + <a href="../../../../../../../libs/test/doc/html/utf/testing-tools/floating_point_comparison.html" target="_top">floating-point + comparison</a>. + </p> +<p> + For example, if we want a tolerance that might suit about 9 arithmetical + operations, say sqrt(9) = 3, we could define: + </p> +<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">tolerance</span> <span class="special">=</span> <span class="number">3</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">T</span><span class="special">>::</span><span class="identifier">epsilon</span><span class="special">();</span> +</pre> +<p> + This is very widely used in Boost.Math testing with Boost.Test's macro + <code class="computeroutput"><span class="identifier">BOOST_CHECK_CLOSE_FRACTION</span></code> + </p> +<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">expected</span> <span class="special">=</span> <span class="number">1.0</span><span class="special">;</span> +<span class="identifier">T</span> <span class="identifier">calculated</span> <span class="special">=</span> <span class="number">1.0</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">T</span><span class="special">>::</span><span class="identifier">epsilon</span><span class="special">();</span> + +<span class="identifier">BOOST_CHECK_CLOSE_FRACTION</span><span class="special">(</span><span class="identifier">expected</span><span class="special">,</span> <span class="identifier">calculated</span><span class="special">,</span> <span class="identifier">tolerance</span><span class="special">);</span> +</pre> +<p> + used thus: + </p> +<pre class="programlisting"><span class="identifier">BOOST_CHECK_CLOSE_FRACTION</span><span class="special">(</span><span class="identifier">expected</span><span class="special">,</span> <span class="identifier">calculated</span><span class="special">,</span> <span class="identifier">tolerance</span><span class="special">);</span> +</pre> +<p> + (There is also a version using tolerance as a percentage rather than a + fraction). + </p> +<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">number</span><span class="special">;</span> +<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_dec_float</span><span class="special">;</span> +<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">et_off</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_dec_float</span><span class="special"><</span><span class="number">50</span><span class="special">>,</span> <span class="identifier">et_off</span> <span class="special">></span> <span class="identifier">cpp_dec_float_50</span><span class="special">;</span> <span class="comment">// 50 decimal digits.</span> +</pre> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + that Boost.Test does not yet allow floating-point comparisons with expression + templates on, so the default expression template parameter has been replaced + by <code class="computeroutput"><span class="identifier">et_off</span></code>. + </p></td></tr> +</table></div> +<pre class="programlisting"><span class="identifier">cpp_dec_float_50</span> <span class="identifier">tolerance</span> <span class="special">=</span> <span class="number">3</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_dec_float_50</span><span class="special">>::</span><span class="identifier">epsilon</span><span class="special">();</span> +<span class="identifier">cpp_dec_float_50</span> <span class="identifier">expected</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">two_pi</span><span class="special"><</span><span class="identifier">cpp_dec_float_50</span><span class="special">>();</span> +<span class="identifier">cpp_dec_float_50</span> <span class="identifier">calculated</span> <span class="special">=</span> <span class="number">2</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_dec_float_50</span><span class="special">>();</span> + +<span class="identifier">BOOST_CHECK_CLOSE_FRACTION</span><span class="special">(</span><span class="identifier">expected</span><span class="special">,</span> <span class="identifier">calculated</span><span class="special">,</span> <span class="identifier">tolerance</span><span class="special">);</span> +</pre> +<h5> +<a name="boost_multiprecision.tut.limits.functions.h7"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.functions.infinity_positive_and_negative"></a></span><a class="link" href="functions.html#boost_multiprecision.tut.limits.functions.infinity_positive_and_negative">Infinity + - positive and negative</a> + </h5> +<p> + For floating-point types only, for which <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">T</span><span class="special">>::</span><span class="identifier">has_infinity</span> + <span class="special">==</span> <span class="keyword">true</span></code>, + function <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">T</span><span class="special">>::</span><span class="identifier">infinity</span><span class="special">()</span></code> + provides an implementation-defined representation for ∞. + </p> +<p> + The 'representation' is a particular bit pattern reserved for infinity. + For IEEE754 system (for which <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">T</span><span class="special">>::</span><span class="identifier">is_iec559</span> + <span class="special">==</span> <span class="keyword">true</span></code>) + <a href="http://en.wikipedia.org/wiki/IEEE_754-1985#Positive_and_negative_infinity" target="_top">positive + and negative infinity</a> are assigned bit patterns for all defined + floating-point types. + </p> +<p> + Confusingly, the string resulting from outputting this representation, + is also implementation-defined. And the string that can be input to generate + the representation is also implementation-defined. + </p> +<p> + For example, the output is <code class="computeroutput"><span class="number">1.</span><span class="special">#</span><span class="identifier">INF</span></code> + on Microsoft systems, but <code class="computeroutput"><span class="identifier">inf</span></code> + on most *nix platforms. + </p> +<p> + This implementation-defined-ness has hampered use of infinity (and NaNs) + but Boost.Math and Boost.Multiprecision work hard to provide a sensible + representation for <span class="bold"><strong>all</strong></span> floating-point + types, not just the built-in types, which with the use of suitable facets + to define the input and output strings, makes it possible to use these + useful features portably and including Boost.Serialization. + </p> +<h5> +<a name="boost_multiprecision.tut.limits.functions.h8"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.functions.not_a_number_nan"></a></span><a class="link" href="functions.html#boost_multiprecision.tut.limits.functions.not_a_number_nan">Not-A-Number + NaN</a> + </h5> +<h6> +<a name="boost_multiprecision.tut.limits.functions.h9"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.functions.quiet_nan"></a></span><a class="link" href="functions.html#boost_multiprecision.tut.limits.functions.quiet_nan">Quiet_NaN</a> + </h6> +<p> + For floating-point types only, for which <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">T</span><span class="special">>::</span><span class="identifier">has_quiet_NaN</span> + <span class="special">==</span> <span class="keyword">true</span></code>, + function <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">T</span><span class="special">>::</span><span class="identifier">quiet_NaN</span><span class="special">()</span></code> + provides an implementation-defined representation for NaN. + </p> +<p> + <a href="http://en.wikipedia.org/wiki/NaN" target="_top">NaNs</a> are values to + indicate that the result of an assignment or computation is meaningless. + A typical example is <code class="computeroutput"><span class="number">0</span><span class="special">/</span><span class="number">0</span></code> but there are many others. + </p> +<p> + NaNs may also be used, to represent missing values: for example, these + could, by convention, be ignored in calculations of statistics like means. + </p> +<p> + Many of the problems with a representation for <a href="http://en.wikipedia.org/wiki/NaN" target="_top">Not-A-Number</a> + has hampered portable use, similar to those with infinity. + </p> +<p> + NaN can be used with binary multiprecision types like <code class="computeroutput"><span class="identifier">cpp_bin_float_quad</span></code>: + </p> +<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_quad</span><span class="special">;</span> + +<span class="keyword">if</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_quad</span><span class="special">>::</span><span class="identifier">has_quiet_NaN</span> <span class="special">==</span> <span class="keyword">true</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">cpp_bin_float_quad</span> <span class="identifier">tolerance</span> <span class="special">=</span> <span class="number">3</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_quad</span><span class="special">>::</span><span class="identifier">epsilon</span><span class="special">();</span> + + <span class="identifier">cpp_bin_float_quad</span> <span class="identifier">NaN</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_quad</span><span class="special">>::</span><span class="identifier">quiet_NaN</span><span class="special">();</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"cpp_bin_float_quad NaN is "</span> <span class="special"><<</span> <span class="identifier">NaN</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// cpp_bin_float_quad NaN is nan</span> + + <span class="identifier">cpp_bin_float_quad</span> <span class="identifier">expected</span> <span class="special">=</span> <span class="identifier">NaN</span><span class="special">;</span> + <span class="identifier">cpp_bin_float_quad</span> <span class="identifier">calculated</span> <span class="special">=</span> <span class="number">2</span> <span class="special">*</span> <span class="identifier">NaN</span><span class="special">;</span> + <span class="comment">// Comparisons of NaN's always fail:</span> + <span class="keyword">bool</span> <span class="identifier">b</span> <span class="special">=</span> <span class="identifier">expected</span> <span class="special">==</span> <span class="identifier">calculated</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">b</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">BOOST_CHECK_NE</span><span class="special">(</span><span class="identifier">expected</span><span class="special">,</span> <span class="identifier">expected</span><span class="special">);</span> + <span class="identifier">BOOST_CHECK_NE</span><span class="special">(</span><span class="identifier">expected</span><span class="special">,</span> <span class="identifier">calculated</span><span class="special">);</span> +<span class="special">}</span> +<span class="keyword">else</span> +<span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Type "</span> <span class="special"><<</span> <span class="keyword">typeid</span><span class="special">(</span><span class="identifier">cpp_bin_float_quad</span><span class="special">).</span><span class="identifier">name</span><span class="special">()</span> <span class="special"><<</span> <span class="string">" does not have NaNs!"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + But using Boost.Math and suitable facets can permit portable use of both + NaNs and positive and negative infinity. + </p> +<p> + See <a href="../../../../../../../libs/math/example/nonfinite_facet_sstream.cpp" target="_top">boost:/libs/math/example/nonfinite_facet_sstream.cpp</a> + and we also need + </p> +<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">special_functions</span><span class="special">/</span><span class="identifier">nonfinite_num_facets</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Then we can equally well use a multiprecision type cpp_bin_float_quad: + </p> +<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_quad</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">cpp_bin_float_quad</span> <span class="identifier">T</span><span class="special">;</span> + +<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">nonfinite_num_put</span><span class="special">;</span> +<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">nonfinite_num_get</span><span class="special">;</span> +<span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">locale</span> <span class="identifier">old_locale</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">locale</span> <span class="identifier">tmp_locale</span><span class="special">(</span><span class="identifier">old_locale</span><span class="special">,</span> <span class="keyword">new</span> <span class="identifier">nonfinite_num_put</span><span class="special"><</span><span class="keyword">char</span><span class="special">>);</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">locale</span> <span class="identifier">new_locale</span><span class="special">(</span><span class="identifier">tmp_locale</span><span class="special">,</span> <span class="keyword">new</span> <span class="identifier">nonfinite_num_get</span><span class="special"><</span><span class="keyword">char</span><span class="special">>);</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">stringstream</span> <span class="identifier">ss</span><span class="special">;</span> + <span class="identifier">ss</span><span class="special">.</span><span class="identifier">imbue</span><span class="special">(</span><span class="identifier">new_locale</span><span class="special">);</span> + <span class="identifier">T</span> <span class="identifier">inf</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">T</span><span class="special">>::</span><span class="identifier">infinity</span><span class="special">();</span> + <span class="identifier">ss</span> <span class="special"><<</span> <span class="identifier">inf</span><span class="special">;</span> <span class="comment">// Write out.</span> + <span class="identifier">assert</span><span class="special">(</span><span class="identifier">ss</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> <span class="special">==</span> <span class="string">"inf"</span><span class="special">);</span> + <span class="identifier">T</span> <span class="identifier">r</span><span class="special">;</span> + <span class="identifier">ss</span> <span class="special">>></span> <span class="identifier">r</span><span class="special">;</span> <span class="comment">// Read back in.</span> + <span class="identifier">assert</span><span class="special">(</span><span class="identifier">inf</span> <span class="special">==</span> <span class="identifier">r</span><span class="special">);</span> <span class="comment">// Confirms that the floating-point values really are identical.</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"infinity output was "</span> <span class="special"><<</span> <span class="identifier">ss</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"infinity input was "</span> <span class="special"><<</span> <span class="identifier">r</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<pre class="programlisting"><span class="identifier">infinity</span> <span class="identifier">output</span> <span class="identifier">was</span> <span class="identifier">inf</span> +<span class="identifier">infinity</span> <span class="identifier">input</span> <span class="identifier">was</span> <span class="identifier">inf</span> +</pre> +<p> + Similarly we can do the same with NaN (except that we cannot use <code class="computeroutput"><span class="identifier">assert</span></code>) + </p> +<pre class="programlisting"><span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">locale</span> <span class="identifier">old_locale</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">locale</span> <span class="identifier">tmp_locale</span><span class="special">(</span><span class="identifier">old_locale</span><span class="special">,</span> <span class="keyword">new</span> <span class="identifier">nonfinite_num_put</span><span class="special"><</span><span class="keyword">char</span><span class="special">>);</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">locale</span> <span class="identifier">new_locale</span><span class="special">(</span><span class="identifier">tmp_locale</span><span class="special">,</span> <span class="keyword">new</span> <span class="identifier">nonfinite_num_get</span><span class="special"><</span><span class="keyword">char</span><span class="special">>);</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">stringstream</span> <span class="identifier">ss</span><span class="special">;</span> + <span class="identifier">ss</span><span class="special">.</span><span class="identifier">imbue</span><span class="special">(</span><span class="identifier">new_locale</span><span class="special">);</span> + <span class="identifier">T</span> <span class="identifier">n</span><span class="special">;</span> + <span class="identifier">T</span> <span class="identifier">NaN</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">T</span><span class="special">>::</span><span class="identifier">quiet_NaN</span><span class="special">();</span> + <span class="identifier">ss</span> <span class="special"><<</span> <span class="identifier">NaN</span><span class="special">;</span> <span class="comment">// Write out.</span> + <span class="identifier">assert</span><span class="special">(</span><span class="identifier">ss</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> <span class="special">==</span> <span class="string">"nan"</span><span class="special">);</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"NaN output was "</span> <span class="special"><<</span> <span class="identifier">ss</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">ss</span> <span class="special">>></span> <span class="identifier">n</span><span class="special">;</span> <span class="comment">// Read back in.</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"NaN input was "</span> <span class="special"><<</span> <span class="identifier">n</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + NaN output was nan NaN input was nan + </p> +<h6> +<a name="boost_multiprecision.tut.limits.functions.h10"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.functions.signaling_nan"></a></span><a class="link" href="functions.html#boost_multiprecision.tut.limits.functions.signaling_nan">Signaling + NaN</a> + </h6> +<p> + For floating-point types only, for which <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">T</span><span class="special">>::</span><span class="identifier">has_signaling_NaN</span> + <span class="special">==</span> <span class="keyword">true</span></code>, + function <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">T</span><span class="special">>::</span><span class="identifier">signaling_NaN</span><span class="special">()</span></code> + provides an implementation-defined representation for NaN that causes a + hardware trap. It should be noted however, that at least one implementation + of this function causes a hardware trap to be triggered simply by calling + <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">T</span><span class="special">>::</span><span class="identifier">signaling_NaN</span><span class="special">()</span></code>, + and not only by using the value returned. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="constants.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../limits.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="limits32.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/how_to_tell.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/how_to_tell.html new file mode 100644 index 0000000000..6efd4f80af --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/how_to_tell.html @@ -0,0 +1,168 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>How to Determine the Kind of a Number From std::numeric_limits</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../limits.html" title="Numeric Limits"> +<link rel="prev" href="limits32.html" title="Numeric limits for 32-bit platform"> +<link rel="next" href="../input_output.html" title="Input Output"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="limits32.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../limits.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="../input_output.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.limits.how_to_tell"></a><a class="link" href="how_to_tell.html" title="How to Determine the Kind of a Number From std::numeric_limits">How to + Determine the Kind of a Number From <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code></a> +</h4></div></div></div> +<p> + Based on the information above, one can see that different kinds of numbers + can be differentiated based on the information stored in <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code>. This is in addition to + the traits class <a class="link" href="../../ref/number.html#boost_multiprecision.ref.number.traits_class_support">number_category</a> + provided by this library. + </p> +<h5> +<a name="boost_multiprecision.tut.limits.how_to_tell.h0"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.how_to_tell.integer_types"></a></span><a class="link" href="how_to_tell.html#boost_multiprecision.tut.limits.how_to_tell.integer_types">Integer + Types</a> + </h5> +<p> + For an integer type T, all of the following conditions hold: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">is_specialized</span> <span class="special">==</span> <span class="keyword">true</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">is_integer</span> <span class="special">==</span> <span class="keyword">true</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">is_exact</span> <span class="special">==</span> <span class="keyword">true</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">min_exponent</span> <span class="special">==</span> <span class="number">0</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">max_exponent</span> <span class="special">==</span> <span class="number">0</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">min_exponent10</span> <span class="special">==</span> <span class="number">0</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">max_exponent10</span> <span class="special">==</span> <span class="number">0</span> +</pre> +<p> + In addition the type is <span class="emphasis"><em>signed</em></span> if: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">is_signed</span> <span class="special">==</span> <span class="keyword">true</span> +</pre> +<p> + If the type is arbitrary precision then: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">is_bounded</span> <span class="special">==</span> <span class="keyword">false</span> +</pre> +<p> + Otherwise the type is bounded, and returns a non zero value from: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">max</span><span class="special">()</span> +</pre> +<p> + and has: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">is_modulo</span> <span class="special">==</span> <span class="keyword">true</span> +</pre> +<p> + if the type implements modulo arithmetic on overflow. + </p> +<h5> +<a name="boost_multiprecision.tut.limits.how_to_tell.h1"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.how_to_tell.rational_types"></a></span><a class="link" href="how_to_tell.html#boost_multiprecision.tut.limits.how_to_tell.rational_types">Rational + Types</a> + </h5> +<p> + Rational types are just like integers except that: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">is_integer</span> <span class="special">==</span> <span class="keyword">false</span> +</pre> +<h5> +<a name="boost_multiprecision.tut.limits.how_to_tell.h2"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.how_to_tell.fixed_precision_types"></a></span><a class="link" href="how_to_tell.html#boost_multiprecision.tut.limits.how_to_tell.fixed_precision_types">Fixed + Precision Types</a> + </h5> +<p> + There appears to be no way to tell these apart from rational types, unless + they set: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">is_exact</span> <span class="special">==</span> <span class="keyword">false</span> +</pre> +<p> + This is because these types are in essence a rational type with a fixed + denominator. + </p> +<h5> +<a name="boost_multiprecision.tut.limits.how_to_tell.h3"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.how_to_tell.floating_point_types"></a></span><a class="link" href="how_to_tell.html#boost_multiprecision.tut.limits.how_to_tell.floating_point_types">Floating + Point Types</a> + </h5> +<p> + For a floating point type T, all of the following conditions hold: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">is_specialized</span> <span class="special">==</span> <span class="keyword">true</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">is_integer</span> <span class="special">==</span> <span class="keyword">false</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">is_exact</span> <span class="special">==</span> <span class="keyword">false</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">min_exponent</span> <span class="special">!=</span> <span class="number">0</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">max_exponent</span> <span class="special">!=</span> <span class="number">0</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">min_exponent10</span> <span class="special">!=</span> <span class="number">0</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">max_exponent10</span> <span class="special">!=</span> <span class="number">0</span> +</pre> +<p> + In addition the type is <span class="emphasis"><em>signed</em></span> if: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">is_signed</span> <span class="special">==</span> <span class="keyword">true</span> +</pre> +<p> + And the type may be decimal or binary depending on the value of: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">radix</span> +</pre> +<p> + In general, there are no arbitrary precision floating point types, and + so: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">is_bounded</span> <span class="special">==</span> <span class="keyword">false</span> +</pre> +<h5> +<a name="boost_multiprecision.tut.limits.how_to_tell.h4"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.how_to_tell.exact_floating_point_types"></a></span><a class="link" href="how_to_tell.html#boost_multiprecision.tut.limits.how_to_tell.exact_floating_point_types">Exact + Floating Point Types</a> + </h5> +<p> + Exact floating point types are a <a href="http://en.wikipedia.org/wiki/Field_%28mathematics%29" target="_top">field</a> + composed of an arbitrary precision integer scaled by an exponent. Such + types have no division operator and are the same as floating point types + except: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">is_exact</span> <span class="special">==</span> <span class="keyword">true</span> +</pre> +<h5> +<a name="boost_multiprecision.tut.limits.how_to_tell.h5"></a> + <span class="phrase"><a name="boost_multiprecision.tut.limits.how_to_tell.complex_numbers"></a></span><a class="link" href="how_to_tell.html#boost_multiprecision.tut.limits.how_to_tell.complex_numbers">Complex + Numbers</a> + </h5> +<p> + For historical reasons, complex numbers do not specialize <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code>, instead you must inspect + <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">T</span><span class="special">::</span><span class="identifier">value_type</span><span class="special">></span></code>. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="limits32.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../limits.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="../input_output.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/limits32.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/limits32.html new file mode 100644 index 0000000000..40d4570d5d --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/limits32.html @@ -0,0 +1,2049 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Numeric limits for 32-bit platform</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../limits.html" title="Numeric Limits"> +<link rel="prev" href="functions.html" title="std::numeric_limits<> functions"> +<link rel="next" href="how_to_tell.html" title="How to Determine the Kind of a Number From std::numeric_limits"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="functions.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../limits.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="how_to_tell.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.limits.limits32"></a><a class="link" href="limits32.html" title="Numeric limits for 32-bit platform">Numeric limits + for 32-bit platform</a> +</h4></div></div></div> +<p> + These tables were generated using the following program and options: + </p> +<pre class="programlisting"> +Program: + numeric_limits_qbk.cpp +Mon Nov 4 18:09:06 2013 +BuildInfo: + Platform Win32 + Compiler Microsoft Visual C++ version 10.0 + MSVC version 160040219. + STL Dinkumware standard library version 520 + Boost version 1.55.0 +</pre> +<div class="table"> +<a name="boost_multiprecision.tut.limits.limits32.integral_constants"></a><p class="title"><b>Table 1.4. Integer types constants (<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">T</span><span class="special">>::</span><span class="identifier">is_integer</span> + <span class="special">==</span> <span class="keyword">true</span></code> + && is_exact == true)</b></p> +<div class="table-contents"><table class="table" summary="Integer types constants (std::numeric_limits<T>::is_integer + == true + && is_exact == true)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + type + </p> + </th> +<th> + <p> + signed + </p> + </th> +<th> + <p> + bound + </p> + </th> +<th> + <p> + modulo + </p> + </th> +<th> + <p> + round + </p> + </th> +<th> + <p> + radix + </p> + </th> +<th> + <p> + digits + </p> + </th> +<th> + <p> + digits10 + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + bool + </p> + </td> +<td> + <p> + unsigned + </p> + </td> +<td> + <p> + bound + </p> + </td> +<td> + <p> + no + </p> + </td> +<td> + <p> + to zero + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 1 + </p> + </td> +<td> + <p> + 0 + </p> + </td> +</tr> +<tr> +<td> + <p> + char + </p> + </td> +<td> + <p> + signed + </p> + </td> +<td> + <p> + bound + </p> + </td> +<td> + <p> + modulo + </p> + </td> +<td> + <p> + to zero + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 7 + </p> + </td> +<td> + <p> + 2 + </p> + </td> +</tr> +<tr> +<td> + <p> + unsigned char + </p> + </td> +<td> + <p> + unsigned + </p> + </td> +<td> + <p> + bound + </p> + </td> +<td> + <p> + modulo + </p> + </td> +<td> + <p> + to zero + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 8 + </p> + </td> +<td> + <p> + 2 + </p> + </td> +</tr> +<tr> +<td> + <p> + char16_t + </p> + </td> +<td> + <p> + unsigned + </p> + </td> +<td> + <p> + bound + </p> + </td> +<td> + <p> + modulo + </p> + </td> +<td> + <p> + to zero + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 16 + </p> + </td> +<td> + <p> + 4 + </p> + </td> +</tr> +<tr> +<td> + <p> + char32_t + </p> + </td> +<td> + <p> + unsigned + </p> + </td> +<td> + <p> + bound + </p> + </td> +<td> + <p> + modulo + </p> + </td> +<td> + <p> + to zero + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 32 + </p> + </td> +<td> + <p> + 9 + </p> + </td> +</tr> +<tr> +<td> + <p> + short + </p> + </td> +<td> + <p> + signed + </p> + </td> +<td> + <p> + bound + </p> + </td> +<td> + <p> + modulo + </p> + </td> +<td> + <p> + to zero + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 15 + </p> + </td> +<td> + <p> + 4 + </p> + </td> +</tr> +<tr> +<td> + <p> + unsigned short + </p> + </td> +<td> + <p> + unsigned + </p> + </td> +<td> + <p> + bound + </p> + </td> +<td> + <p> + modulo + </p> + </td> +<td> + <p> + to zero + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 16 + </p> + </td> +<td> + <p> + 4 + </p> + </td> +</tr> +<tr> +<td> + <p> + int + </p> + </td> +<td> + <p> + signed + </p> + </td> +<td> + <p> + bound + </p> + </td> +<td> + <p> + modulo + </p> + </td> +<td> + <p> + to zero + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 31 + </p> + </td> +<td> + <p> + 9 + </p> + </td> +</tr> +<tr> +<td> + <p> + unsigned + </p> + </td> +<td> + <p> + unsigned + </p> + </td> +<td> + <p> + bound + </p> + </td> +<td> + <p> + modulo + </p> + </td> +<td> + <p> + to zero + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 32 + </p> + </td> +<td> + <p> + 9 + </p> + </td> +</tr> +<tr> +<td> + <p> + long + </p> + </td> +<td> + <p> + signed + </p> + </td> +<td> + <p> + bound + </p> + </td> +<td> + <p> + modulo + </p> + </td> +<td> + <p> + to zero + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 31 + </p> + </td> +<td> + <p> + 9 + </p> + </td> +</tr> +<tr> +<td> + <p> + unsigned long + </p> + </td> +<td> + <p> + unsigned + </p> + </td> +<td> + <p> + bound + </p> + </td> +<td> + <p> + modulo + </p> + </td> +<td> + <p> + to zero + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 32 + </p> + </td> +<td> + <p> + 9 + </p> + </td> +</tr> +<tr> +<td> + <p> + long long + </p> + </td> +<td> + <p> + signed + </p> + </td> +<td> + <p> + bound + </p> + </td> +<td> + <p> + modulo + </p> + </td> +<td> + <p> + to zero + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 63 + </p> + </td> +<td> + <p> + 18 + </p> + </td> +</tr> +<tr> +<td> + <p> + unsigned long long + </p> + </td> +<td> + <p> + unsigned + </p> + </td> +<td> + <p> + bound + </p> + </td> +<td> + <p> + modulo + </p> + </td> +<td> + <p> + to zero + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 64 + </p> + </td> +<td> + <p> + 19 + </p> + </td> +</tr> +<tr> +<td> + <p> + int32_t + </p> + </td> +<td> + <p> + signed + </p> + </td> +<td> + <p> + bound + </p> + </td> +<td> + <p> + modulo + </p> + </td> +<td> + <p> + to zero + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 31 + </p> + </td> +<td> + <p> + 9 + </p> + </td> +</tr> +<tr> +<td> + <p> + uint32_t + </p> + </td> +<td> + <p> + unsigned + </p> + </td> +<td> + <p> + bound + </p> + </td> +<td> + <p> + modulo + </p> + </td> +<td> + <p> + to zero + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 32 + </p> + </td> +<td> + <p> + 9 + </p> + </td> +</tr> +<tr> +<td> + <p> + int64_t + </p> + </td> +<td> + <p> + signed + </p> + </td> +<td> + <p> + bound + </p> + </td> +<td> + <p> + modulo + </p> + </td> +<td> + <p> + to zero + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 63 + </p> + </td> +<td> + <p> + 18 + </p> + </td> +</tr> +<tr> +<td> + <p> + uint64_t + </p> + </td> +<td> + <p> + unsigned + </p> + </td> +<td> + <p> + bound + </p> + </td> +<td> + <p> + modulo + </p> + </td> +<td> + <p> + to zero + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 64 + </p> + </td> +<td> + <p> + 19 + </p> + </td> +</tr> +<tr> +<td> + <p> + int128_t + </p> + </td> +<td> + <p> + signed + </p> + </td> +<td> + <p> + bound + </p> + </td> +<td> + <p> + modulo + </p> + </td> +<td> + <p> + to zero + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 128 + </p> + </td> +<td> + <p> + 38 + </p> + </td> +</tr> +<tr> +<td> + <p> + uint128_t + </p> + </td> +<td> + <p> + unsigned + </p> + </td> +<td> + <p> + bound + </p> + </td> +<td> + <p> + modulo + </p> + </td> +<td> + <p> + to zero + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 128 + </p> + </td> +<td> + <p> + 38 + </p> + </td> +</tr> +<tr> +<td> + <p> + int256_t + </p> + </td> +<td> + <p> + signed + </p> + </td> +<td> + <p> + bound + </p> + </td> +<td> + <p> + modulo + </p> + </td> +<td> + <p> + to zero + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 256 + </p> + </td> +<td> + <p> + 77 + </p> + </td> +</tr> +<tr> +<td> + <p> + uint256_t + </p> + </td> +<td> + <p> + unsigned + </p> + </td> +<td> + <p> + bound + </p> + </td> +<td> + <p> + modulo + </p> + </td> +<td> + <p> + to zero + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 256 + </p> + </td> +<td> + <p> + 77 + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_int + </p> + </td> +<td> + <p> + signed + </p> + </td> +<td> + <p> + unbounded + </p> + </td> +<td> + <p> + no + </p> + </td> +<td> + <p> + to zero + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 2147483647 + </p> + </td> +<td> + <p> + 646392383 + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.tut.limits.limits32.integral_functions"></a><p class="title"><b>Table 1.5. Integer types functions (<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">T</span><span class="special">>::</span><span class="identifier">is_integer</span> + <span class="special">==</span> <span class="keyword">true</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">T</span><span class="special">>::</span><span class="identifier">min</span><span class="special">()</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">T</span><span class="special">>::</span><span class="identifier">lowest</span><span class="special">()</span></code> )</b></p> +<div class="table-contents"><table class="table" summary="Integer types functions (std::numeric_limits<T>::is_integer + == true + && std::numeric_limits<T>::min() == std::numeric_limits<T>::lowest() )"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + function + </p> + </th> +<th> + <p> + max + </p> + </th> +<th> + <p> + min + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + bool + </p> + </td> +<td> + <p> + 1 + </p> + </td> +<td> + <p> + 0 + </p> + </td> +</tr> +<tr> +<td> + <p> + char + </p> + </td> +<td> + <p> + 127 + </p> + </td> +<td> + <p> + -128 + </p> + </td> +</tr> +<tr> +<td> + <p> + unsigned char + </p> + </td> +<td> + <p> + 255 + </p> + </td> +<td> + <p> + 0 + </p> + </td> +</tr> +<tr> +<td> + <p> + char16_t + </p> + </td> +<td> + <p> + 65535 + </p> + </td> +<td> + <p> + 0 + </p> + </td> +</tr> +<tr> +<td> + <p> + char32_t + </p> + </td> +<td> + <p> + 4294967295 + </p> + </td> +<td> + <p> + 0 + </p> + </td> +</tr> +<tr> +<td> + <p> + short + </p> + </td> +<td> + <p> + 32767 + </p> + </td> +<td> + <p> + -32768 + </p> + </td> +</tr> +<tr> +<td> + <p> + unsigned short + </p> + </td> +<td> + <p> + 65535 + </p> + </td> +<td> + <p> + 0 + </p> + </td> +</tr> +<tr> +<td> + <p> + int + </p> + </td> +<td> + <p> + 2147483647 + </p> + </td> +<td> + <p> + -2147483648 + </p> + </td> +</tr> +<tr> +<td> + <p> + unsigned int + </p> + </td> +<td> + <p> + 4294967295 + </p> + </td> +<td> + <p> + 0 + </p> + </td> +</tr> +<tr> +<td> + <p> + long + </p> + </td> +<td> + <p> + 2147483647 + </p> + </td> +<td> + <p> + -2147483648 + </p> + </td> +</tr> +<tr> +<td> + <p> + unsigned long + </p> + </td> +<td> + <p> + 4294967295 + </p> + </td> +<td> + <p> + 0 + </p> + </td> +</tr> +<tr> +<td> + <p> + long long + </p> + </td> +<td> + <p> + 9223372036854775807 + </p> + </td> +<td> + <p> + -9223372036854775808 + </p> + </td> +</tr> +<tr> +<td> + <p> + unsigned long long + </p> + </td> +<td> + <p> + 18446744073709551615 + </p> + </td> +<td> + <p> + 0 + </p> + </td> +</tr> +<tr> +<td> + <p> + int32_t + </p> + </td> +<td> + <p> + 2147483647 + </p> + </td> +<td> + <p> + -2147483648 + </p> + </td> +</tr> +<tr> +<td> + <p> + int64_t + </p> + </td> +<td> + <p> + 9223372036854775807 + </p> + </td> +<td> + <p> + -9223372036854775808 + </p> + </td> +</tr> +<tr> +<td> + <p> + int128_t + </p> + </td> +<td> + <p> + 340282366920938463463374607431768211455 + </p> + </td> +<td> + <p> + -340282366920938463463374607431768211455 + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.tut.limits.limits32.float_functions"></a><p class="title"><b>Table 1.6. Floating-point types constants (<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">T</span><span class="special">>::</span><span class="identifier">is_integer</span><span class="special">==</span><span class="keyword">false</span> <span class="special">&&</span> <span class="identifier">is_signed</span><span class="special">==</span><span class="keyword">true</span> <span class="special">&&</span> <span class="identifier">is_modulo</span><span class="special">==</span><span class="keyword">false</span> <span class="special">&&</span> <span class="identifier">is_exact</span><span class="special">==</span><span class="keyword">false</span> <span class="special">&&</span> <span class="identifier">is_bound</span><span class="special">==</span><span class="keyword">true</span></code>)</b></p> +<div class="table-contents"><table class="table" summary="Floating-point types constants (std::numeric_limits<T>::is_integer==false && is_signed==true && is_modulo==false && is_exact==false && is_bound==true)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +<col> +<col> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + type + </p> + </th> +<th> + <p> + round + </p> + </th> +<th> + <p> + radix + </p> + </th> +<th> + <p> + digits + </p> + </th> +<th> + <p> + digits10 + </p> + </th> +<th> + <p> + max_digits10 + </p> + </th> +<th> + <p> + min_exp + </p> + </th> +<th> + <p> + min_exp10 + </p> + </th> +<th> + <p> + max_exp + </p> + </th> +<th> + <p> + max_exp10 + </p> + </th> +<th> + <p> + tiny + </p> + </th> +<th> + <p> + trap + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + float + </p> + </td> +<td> + <p> + to nearest + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 24 + </p> + </td> +<td> + <p> + 6 + </p> + </td> +<td> + <p> + 8 + </p> + </td> +<td> + <p> + -125 + </p> + </td> +<td> + <p> + -37 + </p> + </td> +<td> + <p> + 128 + </p> + </td> +<td> + <p> + 38 + </p> + </td> +<td> + <p> + tiny + </p> + </td> +<td> + <p> + traps + </p> + </td> +</tr> +<tr> +<td> + <p> + double + </p> + </td> +<td> + <p> + to nearest + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 53 + </p> + </td> +<td> + <p> + 15 + </p> + </td> +<td> + <p> + 17 + </p> + </td> +<td> + <p> + -1021 + </p> + </td> +<td> + <p> + -307 + </p> + </td> +<td> + <p> + 1024 + </p> + </td> +<td> + <p> + 308 + </p> + </td> +<td> + <p> + tiny + </p> + </td> +<td> + <p> + traps + </p> + </td> +</tr> +<tr> +<td> + <p> + long double + </p> + </td> +<td> + <p> + to nearest + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 53 + </p> + </td> +<td> + <p> + 15 + </p> + </td> +<td> + <p> + 17 + </p> + </td> +<td> + <p> + -1021 + </p> + </td> +<td> + <p> + -307 + </p> + </td> +<td> + <p> + 1024 + </p> + </td> +<td> + <p> + 308 + </p> + </td> +<td> + <p> + tiny + </p> + </td> +<td> + <p> + traps + </p> + </td> +</tr> +<tr> +<td> + <p> + cpp_dec_float_50 + </p> + </td> +<td> + <p> + indeterminate + </p> + </td> +<td> + <p> + 10 + </p> + </td> +<td> + <p> + 50 + </p> + </td> +<td> + <p> + 50 + </p> + </td> +<td> + <p> + 80 + </p> + </td> +<td> + <p> + -222953000 + </p> + </td> +<td> + <p> + -67108864 + </p> + </td> +<td> + <p> + 222953000 + </p> + </td> +<td> + <p> + 67108864 + </p> + </td> +<td> + <p> + no + </p> + </td> +<td> + <p> + no + </p> + </td> +</tr> +<tr> +<td> + <p> + bin_128bit_double_type + </p> + </td> +<td> + <p> + to nearest + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + 377 + </p> + </td> +<td> + <p> + 113 + </p> + </td> +<td> + <p> + 115 + </p> + </td> +<td> + <p> + -2147482894 + </p> + </td> +<td> + <p> + -646392082 + </p> + </td> +<td> + <p> + 2147482893 + </p> + </td> +<td> + <p> + 646392082 + </p> + </td> +<td> + <p> + no + </p> + </td> +<td> + <p> + traps + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="boost_multiprecision.tut.limits.limits32.float_functions0"></a><p class="title"><b>Table 1.7. Floating-point types functions (<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">T</span><span class="special">>::</span><span class="identifier">is_integer</span> + <span class="special">==</span> <span class="keyword">false</span></code>)</b></p> +<div class="table-contents"><table class="table" summary="Floating-point types functions (std::numeric_limits<T>::is_integer + == false)"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + function + </p> + </th> +<th> + <p> + float + </p> + </th> +<th> + <p> + double + </p> + </th> +<th> + <p> + long double + </p> + </th> +<th> + <p> + cpp_dec_50 + </p> + </th> +<th> + <p> + cpp_bin_128 + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + max + </p> + </td> +<td> + <p> + 3.40282e+038 + </p> + </td> +<td> + <p> + 1.79769e+308 + </p> + </td> +<td> + <p> + 1.79769e+308 + </p> + </td> +<td> + <p> + 1e+67108865 + </p> + </td> +<td> + <p> + 1.85906e+646456766 + </p> + </td> +</tr> +<tr> +<td> + <p> + min + </p> + </td> +<td> + <p> + 1.17549e-038 + </p> + </td> +<td> + <p> + 2.22507e-308 + </p> + </td> +<td> + <p> + 2.22507e-308 + </p> + </td> +<td> + <p> + 1e-67108864 + </p> + </td> +<td> + <p> + 5.37906e-646456767 + </p> + </td> +</tr> +<tr> +<td> + <p> + epsilon + </p> + </td> +<td> + <p> + 1.19209e-007 + </p> + </td> +<td> + <p> + 2.22045e-016 + </p> + </td> +<td> + <p> + 2.22045e-016 + </p> + </td> +<td> + <p> + 1e-49 + </p> + </td> +<td> + <p> + 6.49713e-114 + </p> + </td> +</tr> +<tr> +<td> + <p> + round_error + </p> + </td> +<td> + <p> + 0.5 + </p> + </td> +<td> + <p> + 0.5 + </p> + </td> +<td> + <p> + 0.5 + </p> + </td> +<td> + <p> + 0.5 + </p> + </td> +<td> + <p> + 0.5 + </p> + </td> +</tr> +<tr> +<td> + <p> + infinity + </p> + </td> +<td> + <p> + 1.#INF + </p> + </td> +<td> + <p> + 1.#INF + </p> + </td> +<td> + <p> + 1.#INF + </p> + </td> +<td> + <p> + inf + </p> + </td> +<td> + <p> + inf + </p> + </td> +</tr> +<tr> +<td> + <p> + quiet_NaN + </p> + </td> +<td> + <p> + 1.#QNAN + </p> + </td> +<td> + <p> + 1.#QNAN + </p> + </td> +<td> + <p> + 1.#QNAN + </p> + </td> +<td> + <p> + nan + </p> + </td> +<td> + <p> + nan + </p> + </td> +</tr> +<tr> +<td> + <p> + signaling_NaN + </p> + </td> +<td> + <p> + 1.#QNAN + </p> + </td> +<td> + <p> + 1.#QNAN + </p> + </td> +<td> + <p> + 1.#QNAN + </p> + </td> +<td> + <p> + 0 + </p> + </td> +<td> + <p> + 0 + </p> + </td> +</tr> +<tr> +<td> + <p> + denorm_min + </p> + </td> +<td> + <p> + 1.4013e-045 + </p> + </td> +<td> + <p> + 4.94066e-324 + </p> + </td> +<td> + <p> + 4.94066e-324 + </p> + </td> +<td> + <p> + 0 + </p> + </td> +<td> + <p> + 0 + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="functions.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../limits.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="how_to_tell.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/lits.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/lits.html new file mode 100644 index 0000000000..6971ffc88d --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/lits.html @@ -0,0 +1,210 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Literal Types and constexpr Support</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../tut.html" title="Tutorial"> +<link rel="prev" href="primetest.html" title="Primality Testing"> +<link rel="next" href="rounding.html" title="Rounding Rules for Conversions"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="primetest.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="rounding.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.tut.lits"></a><a class="link" href="lits.html" title="Literal Types and constexpr Support">Literal Types and <code class="computeroutput"><span class="keyword">constexpr</span></code> Support</a> +</h3></div></div></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The features described in this section make heavy use of C++11 language + features, currently (as of May 2013) only GCC-4.7 and later, and Clang + 3.3 and later have the support required to make these features work. + </p></td></tr> +</table></div> +<p> + There is limited support for <code class="computeroutput"><span class="keyword">constexpr</span></code> + and user-defined literals in the library, currently the <code class="computeroutput"><span class="identifier">number</span></code> + front end supports <code class="computeroutput"><span class="keyword">constexpr</span></code> + on default construction and all forwarding constructors, but not on any of + the non-member operators. So if some type <code class="computeroutput"><span class="identifier">B</span></code> + is a literal type, then <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">B</span><span class="special">></span></code> + is also a literal type, and you will be able to compile-time-construct such + a type from any literal that <code class="computeroutput"><span class="identifier">B</span></code> + is compile-time-constructible from. However, you will not be able to perform + compile-time arithmetic on such types. + </p> +<p> + Currently the only backend type provided by the library that is also a literal + type are instantiations of <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code> + where the Allocator parameter is type <code class="computeroutput"><span class="keyword">void</span></code>, + and the Checked parameter is <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">unchecked</span></code>. + </p> +<p> + For example: + </p> +<pre class="programlisting"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span> + +<span class="keyword">constexpr</span> <span class="identifier">int128_t</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="comment">// OK, fixed precision int128_t has no allocator.</span> +<span class="keyword">constexpr</span> <span class="identifier">uint1024_t</span> <span class="identifier">j</span> <span class="special">=</span> <span class="number">0</span><span class="identifier">xFFFFFFFF00000000uLL</span><span class="special">;</span> <span class="comment">// OK, fixed precision uint1024_t has no allocator.</span> + +<span class="keyword">constexpr</span> <span class="identifier">checked_uint128_t</span> <span class="identifier">k</span> <span class="special">=</span> <span class="special">-</span><span class="number">1</span><span class="special">;</span> <span class="comment">// Error, checked type is not a literal type as we need runtime error checking.</span> +<span class="keyword">constexpr</span> <span class="identifier">cpp_int</span> <span class="identifier">l</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span> <span class="comment">// Error, type is not a literal as it performs memory management.</span> +</pre> +<p> + There is also limited support for user defined-literals - these are limited + to unchecked, fixed precision <code class="computeroutput"><span class="identifier">cpp_int</span></code>'s + which are specified in hexadecimal notation. The suffixes supported are: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Suffix + </p> + </th> +<th> + <p> + Meaning + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + _cppi + </p> + </td> +<td> + <p> + Specifies a value of type: <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="identifier">N</span><span class="special">,</span><span class="identifier">N</span><span class="special">,</span><span class="identifier">signed_magnitude</span><span class="special">,</span><span class="identifier">unchecked</span><span class="special">,</span><span class="keyword">void</span><span class="special">></span> <span class="special">></span></code>, + where N is chosen to contain just enough digits to hold the number + specified. + </p> + </td> +</tr> +<tr> +<td> + <p> + _cppui + </p> + </td> +<td> + <p> + Specifies a value of type: <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="identifier">N</span><span class="special">,</span><span class="identifier">N</span><span class="special">,</span><span class="identifier">unsigned_magnitude</span><span class="special">,</span><span class="identifier">unchecked</span><span class="special">,</span><span class="keyword">void</span><span class="special">></span> <span class="special">></span></code>, + where N is chosen to contain just enough digits to hold the number + specified. + </p> + </td> +</tr> +<tr> +<td> + <p> + _cppi<span class="emphasis"><em>N</em></span> + </p> + </td> +<td> + <p> + Specifies a value of type <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="identifier">N</span><span class="special">,</span><span class="identifier">N</span><span class="special">,</span><span class="identifier">signed_magnitude</span><span class="special">,</span><span class="identifier">unchecked</span><span class="special">,</span><span class="keyword">void</span><span class="special">></span> <span class="special">></span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + _cppui<span class="emphasis"><em>N</em></span> + </p> + </td> +<td> + <p> + Specifies a value of type <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><</span><span class="identifier">N</span><span class="special">,</span><span class="identifier">N</span><span class="special">,</span><span class="identifier">signed_magnitude</span><span class="special">,</span><span class="identifier">unchecked</span><span class="special">,</span><span class="keyword">void</span><span class="special">></span> <span class="special">></span></code>. + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + In each case, use of these suffixes with hexadecimal values produces a <code class="computeroutput"><span class="keyword">constexpr</span></code> result. + </p> +<p> + Examples: + </p> +<pre class="programlisting"><span class="comment">//</span> +<span class="comment">// Any use of user defined literals requires that we import the literal-operators</span> +<span class="comment">// into current scope first:</span> +<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">literals</span><span class="special">;</span> +<span class="comment">//</span> +<span class="comment">// To keep things simple in the example, we'll make our types used visible to this scope as well:</span> +<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span> +<span class="comment">//</span> +<span class="comment">// The value zero as a number<cpp_int_backend<4,4,signed_magnitude,unchecked,void> >:</span> +<span class="keyword">constexpr</span> <span class="keyword">auto</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">0x0</span><span class="identifier">_cppi</span><span class="special">;</span> +<span class="comment">// The type of each constant has 4 bits per hexadecimal digit,</span> +<span class="comment">// so this is of type uint256_t (ie number<cpp_int_backend<256,256,unsigned_magnitude,unchecked,void> >):</span> +<span class="keyword">constexpr</span> <span class="keyword">auto</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">0</span><span class="identifier">xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_cppui</span><span class="special">;</span> +<span class="comment">//</span> +<span class="comment">// Smaller values can be assigned to larger values:</span> +<span class="identifier">int256_t</span> <span class="identifier">c</span> <span class="special">=</span> <span class="number">0x1234</span><span class="identifier">_cppi</span><span class="special">;</span> <span class="comment">// OK</span> +<span class="comment">//</span> +<span class="comment">// However, this does not currently work in constexpr contexts:</span> +<span class="keyword">constexpr</span> <span class="identifier">int256_t</span> <span class="identifier">d</span> <span class="special">=</span> <span class="number">0x1</span><span class="identifier">_cppi</span><span class="special">;</span> <span class="comment">// Compiler error</span> +<span class="comment">//</span> +<span class="comment">// Constants can be padded out with leading zeros to generate wider types:</span> +<span class="keyword">constexpr</span> <span class="identifier">uint256_t</span> <span class="identifier">e</span> <span class="special">=</span> <span class="number">0</span><span class="identifier">x0000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFF_cppui</span><span class="special">;</span> <span class="comment">// OK</span> +<span class="comment">//</span> +<span class="comment">// However, specific width types are best produced with specific-width suffixes,</span> +<span class="comment">// ones supported by default are `_cpp[u]i128`, `_cpp[u]i256`, `_cpp[u]i512`, `_cpp[u]i1024`.</span> +<span class="comment">//</span> +<span class="keyword">constexpr</span> <span class="identifier">int128_t</span> <span class="identifier">f</span> <span class="special">=</span> <span class="number">0x1234</span><span class="identifier">_cppi128</span><span class="special">;</span> <span class="comment">// OK, always produces an int128_t as the result.</span> +<span class="keyword">constexpr</span> <span class="identifier">uint1024_t</span> <span class="identifier">g</span> <span class="special">=</span> <span class="number">0</span><span class="identifier">xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccc_cppui1024</span><span class="special">;</span> +<span class="comment">//</span> +<span class="comment">// If other specific width types are required, then there is a macro for generating the operators</span> +<span class="comment">// for these. The macro can be used at namespace scope only:</span> +<span class="comment">//</span> +<span class="identifier">BOOST_MP_DEFINE_SIZED_CPP_INT_LITERAL</span><span class="special">(</span><span class="number">2048</span><span class="special">);</span> +<span class="comment">//</span> +<span class="comment">// Now we can create 2048-bit literals as well:</span> +<span class="keyword">constexpr</span> <span class="keyword">auto</span> <span class="identifier">h</span> <span class="special">=</span> <span class="number">0xff</span><span class="identifier">_cppi2048</span><span class="special">;</span> <span class="comment">// h is of type number<cpp_int_backend<2048,2048,signed_magnitude,unchecked,void> ></span> +<span class="comment">//</span> +<span class="comment">// Finally negative values are handled via the unary minus operator:</span> +<span class="comment">//</span> +<span class="keyword">constexpr</span> <span class="identifier">int1024_t</span> <span class="identifier">i</span> <span class="special">=</span> <span class="special">-</span><span class="number">0</span><span class="identifier">xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_cppui1024</span><span class="special">;</span> +<span class="comment">//</span> +<span class="comment">// Which means this also works:</span> +<span class="keyword">constexpr</span> <span class="identifier">int1024_t</span> <span class="identifier">j</span> <span class="special">=</span> <span class="special">-</span><span class="identifier">g</span><span class="special">;</span> <span class="comment">// OK: unary minus operator is constexpr.</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="primetest.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="rounding.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/misc.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/misc.html new file mode 100644 index 0000000000..7438ba6ea1 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/misc.html @@ -0,0 +1,52 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Miscellaneous Number Types.</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../tut.html" title="Tutorial"> +<link rel="prev" href="rational/rational_adaptor.html" title="rational_adaptor"> +<link rel="next" href="misc/logged_adaptor.html" title="logged_adaptor"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="rational/rational_adaptor.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="misc/logged_adaptor.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.tut.misc"></a><a class="link" href="misc.html" title="Miscellaneous Number Types.">Miscellaneous Number Types.</a> +</h3></div></div></div> +<div class="toc"><dl class="toc"> +<dt><span class="section"><a href="misc/logged_adaptor.html">logged_adaptor</a></span></dt> +<dt><span class="section"><a href="misc/debug_adaptor.html">debug_adaptor</a></span></dt> +<dt><span class="section"><a href="misc/visualizers.html">Visual C++ + Debugger Visualizers</a></span></dt> +</dl></div> +<p> + Backend types listed in this section are predominantly designed to aid debugging. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="rational/rational_adaptor.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="misc/logged_adaptor.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/debug_adaptor.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/debug_adaptor.html new file mode 100644 index 0000000000..5b7f0c3972 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/debug_adaptor.html @@ -0,0 +1,99 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>debug_adaptor</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../misc.html" title="Miscellaneous Number Types."> +<link rel="prev" href="logged_adaptor.html" title="logged_adaptor"> +<link rel="next" href="visualizers.html" title="Visual C++ Debugger Visualizers"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="logged_adaptor.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../misc.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="visualizers.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.misc.debug_adaptor"></a><a class="link" href="debug_adaptor.html" title="debug_adaptor">debug_adaptor</a> +</h4></div></div></div> +<p> + <code class="computeroutput"><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">debug_adaptor</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="identifier">Backend</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">debug_adaptor</span><span class="special">;</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> +</pre> +<p> + The <code class="computeroutput"><span class="identifier">debug_adaptor</span></code> type + is used in conjunction with <code class="computeroutput"><span class="identifier">number</span></code> + and some other backend type: it acts as a thin wrapper around some other + backend to class <code class="computeroutput"><span class="identifier">number</span></code> + and intercepts all operations on that object storing the result as a string + within itself. + </p> +<p> + This type provides <code class="computeroutput"><span class="identifier">numeric_limits</span></code> + support whenever the template argument Backend does so. + </p> +<p> + This type is particularly useful when your debugger provides a good view + of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span></code>: when this is the case multiprecision + values can easily be inspected in the debugger by looking at the <code class="computeroutput"><span class="identifier">debug_value</span></code> member of <code class="computeroutput"><span class="identifier">debug_adaptor</span></code>. + The down side of this approach is that runtimes are much slower when using + this type. Set against that it can make debugging very much easier, certainly + much easier than sprinkling code with <code class="computeroutput"><span class="identifier">printf</span></code> + statements. + </p> +<p> + When used in conjunction with the Visual C++ debugger visualisers, the + value of a multiprecision type that uses this backend is displayed in the + debugger just a builtin value would be, here we're inspecting a value of + type <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">debug_adaptor</span><span class="special"><</span><span class="identifier">cpp_dec_float</span><span class="special"><</span><span class="number">50</span><span class="special">></span> <span class="special">></span> + <span class="special">></span></code>: + </p> +<p> + <span class="inlinemediaobject"><img src="../../../../debugger1.png"></span> + </p> +<p> + Otherwise you will need to expand out the view and look at the "debug_value" + member: + </p> +<p> + <span class="inlinemediaobject"><img src="../../../../debugger2.png"></span> + </p> +<p> + It works for all the backend types equally too, here it is inspecting a + <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">debug_adaptor</span><span class="special"><</span><span class="identifier">gmp_rational</span><span class="special">></span> + <span class="special">></span></code>: + </p> +<p> + <span class="inlinemediaobject"><img src="../../../../debugger3.png"></span> + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="logged_adaptor.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../misc.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="visualizers.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/logged_adapter.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/logged_adapter.html new file mode 100644 index 0000000000..91b44abd6f --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/logged_adapter.html @@ -0,0 +1,223 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>logged_adaptor</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.77.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../misc.html" title="Miscellaneous Number Types."> +<link rel="prev" href="../misc.html" title="Miscellaneous Number Types."> +<link rel="next" href="../conversions.html" title="Constructing and Interconverting Between Number Types"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../misc.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../misc.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="../conversions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section boost_multiprecision_tut_misc_logged_adaptor"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.misc.logged_adaptor"></a><a class="link" href="logged_adaptor.html" title="logged_adaptor">logged_adaptor</a> +</h4></div></div></div> +<p> + <code class="computeroutput"><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">logged_adaptor</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">log_postfix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">log_postfix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&</span> <span class="identifier">result1</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">result2</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">log_prefix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&</span> <span class="identifier">arg1</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">log_prefix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&</span> <span class="identifier">arg1</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">arg2</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">log_prefix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&</span> <span class="identifier">arg1</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">arg2</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">U</span><span class="special">&</span> <span class="identifier">arg3</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">V</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">log_prefix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&</span> <span class="identifier">arg1</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">arg2</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">U</span><span class="special">&</span> <span class="identifier">arg3</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">V</span><span class="special">&</span> <span class="identifier">arg4</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="identifier">Backend</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">logged_adaptor</span><span class="special">;</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> +</pre> +<p> + The <code class="computeroutput"><span class="identifier">logged_adaptor</span></code> type + is used in conjunction with <code class="computeroutput"><span class="identifier">number</span></code> + and some other backend type: it acts as a thin wrapper around some other + backend to class <code class="computeroutput"><span class="identifier">number</span></code> + and logs all the events that take place on that object. Before any number + operation takes place, it calls <code class="computeroutput"><span class="identifier">log_prefix_event</span></code> + with the arguments to the operation (up to 4), plus a string describing + the operation. Then after the operation it calls <code class="computeroutput"><span class="identifier">log_postfix_event</span></code> + with the result of the operation, plus a string describing the operation. + Optionally, <code class="computeroutput"><span class="identifier">log_postfix_event</span></code> + takes a second result argument: this occurs when the result of the operation + is not a <code class="computeroutput"><span class="identifier">number</span></code>, for example + when <code class="computeroutput"><span class="identifier">fpclassify</span></code> is called, + <code class="computeroutput"><span class="identifier">log_postfix_event</span></code> will + be called with <code class="computeroutput"><span class="identifier">result1</span></code> + being the argument to the function, and <code class="computeroutput"><span class="identifier">result2</span></code> + being the integer result of <code class="computeroutput"><span class="identifier">fpclassify</span></code>. + </p> +<p> + The default versions of <code class="computeroutput"><span class="identifier">log_prefix_event</span></code> + and <code class="computeroutput"><span class="identifier">log_postfix_event</span></code> do + nothing, it is therefore up to the user to overload these for the particular + backend being observed. + </p> +<p> + This type provides <code class="computeroutput"><span class="identifier">numeric_limits</span></code> + support whenever the template argument Backend does so. + </p> +<p> + This type is particularly useful when combined with an interval number + type - in this case we can use <code class="computeroutput"><span class="identifier">log_postfix_event</span></code> + to monitor the error accumulated after each operation. We could either + set some kind of trap whenever the accumulated error exceeds some threshold, + or simply print out diagnostic information. Using this technique we can + quickly locate the cause of numerical instability in a particular routine. + The following example demonstrates this technique in a trivial algorithm + that deliberately introduces cancellation error: + </p> +<p> +</p> +<pre class="programlisting"><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">mpfi</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<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">logged_adaptor</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iomanip</span><span class="special">></span> +<span class="comment">//</span> +<span class="comment">// Begin by overloading log_postfix_event so we can capture each arithmetic event as it happens:</span> +<span class="comment">//</span> +<span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">D</span><span class="special">></span> +<span class="keyword">inline</span> <span class="keyword">void</span> <span class="identifier">log_postfix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">D</span><span class="special">>&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">)</span> +<span class="special">{</span> + <span class="comment">// Print out the (relative) diameter of the interval:</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span> + <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="identifier">D</span><span class="special">></span> <span class="special">></span> <span class="identifier">diam</span><span class="special">;</span> + <span class="identifier">mpfi_diam</span><span class="special">(</span><span class="identifier">diam</span><span class="special">.</span><span class="identifier">backend</span><span class="special">().</span><span class="identifier">data</span><span class="special">(),</span> <span class="identifier">val</span><span class="special">.</span><span class="identifier">data</span><span class="special">());</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Diameter was "</span> <span class="special"><<</span> <span class="identifier">diam</span> <span class="special"><<</span> <span class="string">" after operation: "</span> <span class="special"><<</span> <span class="identifier">event_description</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +<span class="special">}</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">D</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> +<span class="keyword">inline</span> <span class="keyword">void</span> <span class="identifier">log_postfix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">D</span><span class="special">>&,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">)</span> +<span class="special">{</span> + <span class="comment">// This version is never called in this example.</span> +<span class="special">}</span> + +<span class="special">}}</span> + + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> +<span class="special">{</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">logged_adaptor</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="number">17</span><span class="special">></span> <span class="special">></span> <span class="special">></span> <span class="identifier">logged_type</span><span class="special">;</span> + <span class="comment">//</span> + <span class="comment">// Test case deliberately introduces cancellation error, relative size of interval</span> + <span class="comment">// gradually gets larger after each operation:</span> + <span class="comment">//</span> + <span class="identifier">logged_type</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> + <span class="identifier">a</span> <span class="special">/=</span> <span class="number">10</span><span class="special">;</span> + + <span class="keyword">for</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="number">13</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> + <span class="special">{</span> + <span class="identifier">logged_type</span> <span class="identifier">b</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">*</span> <span class="number">9</span><span class="special">;</span> + <span class="identifier">b</span> <span class="special">/=</span> <span class="number">10</span><span class="special">;</span> + <span class="identifier">a</span> <span class="special">-=</span> <span class="identifier">b</span><span class="special">;</span> + <span class="special">}</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Final value was: "</span> <span class="special"><<</span> <span class="identifier">a</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + </p> +<p> + When we examine program output we can clearly see that the diameter of + the interval increases after each subtraction: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Assignment</span> <span class="identifier">from</span> <span class="identifier">arithmetic</span> <span class="identifier">type</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">4.33681e-18</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">7.70988e-18</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">9.63735e-18</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.30104e-16</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.30104e-16</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.38537e-16</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">2.54788e-15</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">2.54788e-15</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">2.54863e-15</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">4.84164e-14</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">4.84164e-14</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">4.84221e-14</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">9.19962e-13</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">9.19962e-13</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">9.19966e-13</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.74793e-11</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.74793e-11</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.74793e-11</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">3.32107e-10</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">3.32107e-10</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">3.32107e-10</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">6.31003e-09</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">6.31003e-09</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">6.31003e-09</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.19891e-07</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.19891e-07</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.19891e-07</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">2.27792e-06</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">2.27792e-06</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">2.27792e-06</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">4.32805e-05</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">4.32805e-05</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">4.32805e-05</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0.00082233</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0.00082233</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0.00082233</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0.0156243</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0.0156243</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0.0156243</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0.296861</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Final</span> <span class="identifier">value</span> <span class="identifier">was</span><span class="special">:</span> <span class="special">{</span><span class="number">8.51569e-15</span><span class="special">,</span><span class="number">1.14843e-14</span><span class="special">}</span> +</pre> +<p> + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2012 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../misc.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../misc.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="../conversions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/logged_adaptor.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/logged_adaptor.html new file mode 100644 index 0000000000..278e2ab068 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/logged_adaptor.html @@ -0,0 +1,215 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>logged_adaptor</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../misc.html" title="Miscellaneous Number Types."> +<link rel="prev" href="../misc.html" title="Miscellaneous Number Types."> +<link rel="next" href="debug_adaptor.html" title="debug_adaptor"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../misc.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../misc.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="debug_adaptor.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.misc.logged_adaptor"></a><a class="link" href="logged_adaptor.html" title="logged_adaptor">logged_adaptor</a> +</h4></div></div></div> +<p> + <code class="computeroutput"><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">logged_adaptor</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">log_postfix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">log_postfix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&</span> <span class="identifier">result1</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">result2</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">log_prefix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&</span> <span class="identifier">arg1</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">log_prefix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&</span> <span class="identifier">arg1</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">arg2</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">log_prefix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&</span> <span class="identifier">arg1</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">arg2</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">U</span><span class="special">&</span> <span class="identifier">arg3</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">);</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">V</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">log_prefix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&</span> <span class="identifier">arg1</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">arg2</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">U</span><span class="special">&</span> <span class="identifier">arg3</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">V</span><span class="special">&</span> <span class="identifier">arg4</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="identifier">Backend</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">logged_adaptor</span><span class="special">;</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> +</pre> +<p> + The <code class="computeroutput"><span class="identifier">logged_adaptor</span></code> type + is used in conjunction with <code class="computeroutput"><span class="identifier">number</span></code> + and some other backend type: it acts as a thin wrapper around some other + backend to class <code class="computeroutput"><span class="identifier">number</span></code> + and logs all the events that take place on that object. Before any number + operation takes place, it calls <code class="computeroutput"><span class="identifier">log_prefix_event</span></code> + with the arguments to the operation (up to 4), plus a string describing + the operation. Then after the operation it calls <code class="computeroutput"><span class="identifier">log_postfix_event</span></code> + with the result of the operation, plus a string describing the operation. + Optionally, <code class="computeroutput"><span class="identifier">log_postfix_event</span></code> + takes a second result argument: this occurs when the result of the operation + is not a <code class="computeroutput"><span class="identifier">number</span></code>, for example + when <code class="computeroutput"><span class="identifier">fpclassify</span></code> is called, + <code class="computeroutput"><span class="identifier">log_postfix_event</span></code> will + be called with <code class="computeroutput"><span class="identifier">result1</span></code> + being the argument to the function, and <code class="computeroutput"><span class="identifier">result2</span></code> + being the integer result of <code class="computeroutput"><span class="identifier">fpclassify</span></code>. + </p> +<p> + The default versions of <code class="computeroutput"><span class="identifier">log_prefix_event</span></code> + and <code class="computeroutput"><span class="identifier">log_postfix_event</span></code> do + nothing, it is therefore up to the user to overload these for the particular + backend being observed. + </p> +<p> + This type provides <code class="computeroutput"><span class="identifier">numeric_limits</span></code> + support whenever the template argument Backend does so. + </p> +<p> + This type is particularly useful when combined with an interval number + type - in this case we can use <code class="computeroutput"><span class="identifier">log_postfix_event</span></code> + to monitor the error accumulated after each operation. We could either + set some kind of trap whenever the accumulated error exceeds some threshold, + or simply print out diagnostic information. Using this technique we can + quickly locate the cause of numerical instability in a particular routine. + The following example demonstrates this technique in a trivial algorithm + that deliberately introduces cancellation error: + </p> +<pre class="programlisting"><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">mpfi</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<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">logged_adaptor</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iomanip</span><span class="special">></span> +<span class="comment">//</span> +<span class="comment">// Begin by overloading log_postfix_event so we can capture each arithmetic event as it happens:</span> +<span class="comment">//</span> +<span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">D</span><span class="special">></span> +<span class="keyword">inline</span> <span class="keyword">void</span> <span class="identifier">log_postfix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">D</span><span class="special">>&</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">)</span> +<span class="special">{</span> + <span class="comment">// Print out the (relative) diameter of the interval:</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span> + <span class="identifier">number</span><span class="special"><</span><span class="identifier">mpfr_float_backend</span><span class="special"><</span><span class="identifier">D</span><span class="special">></span> <span class="special">></span> <span class="identifier">diam</span><span class="special">;</span> + <span class="identifier">mpfi_diam</span><span class="special">(</span><span class="identifier">diam</span><span class="special">.</span><span class="identifier">backend</span><span class="special">().</span><span class="identifier">data</span><span class="special">(),</span> <span class="identifier">val</span><span class="special">.</span><span class="identifier">data</span><span class="special">());</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Diameter was "</span> <span class="special"><<</span> <span class="identifier">diam</span> <span class="special"><<</span> <span class="string">" after operation: "</span> <span class="special"><<</span> <span class="identifier">event_description</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> +<span class="special">}</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">unsigned</span> <span class="identifier">D</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> +<span class="keyword">inline</span> <span class="keyword">void</span> <span class="identifier">log_postfix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="identifier">D</span><span class="special">>&,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">)</span> +<span class="special">{</span> + <span class="comment">// This version is never called in this example.</span> +<span class="special">}</span> + +<span class="special">}}</span> + + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> +<span class="special">{</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span> + <span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">logged_adaptor</span><span class="special"><</span><span class="identifier">mpfi_float_backend</span><span class="special"><</span><span class="number">17</span><span class="special">></span> <span class="special">></span> <span class="special">></span> <span class="identifier">logged_type</span><span class="special">;</span> + <span class="comment">//</span> + <span class="comment">// Test case deliberately introduces cancellation error, relative size of interval</span> + <span class="comment">// gradually gets larger after each operation:</span> + <span class="comment">//</span> + <span class="identifier">logged_type</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> + <span class="identifier">a</span> <span class="special">/=</span> <span class="number">10</span><span class="special">;</span> + + <span class="keyword">for</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="number">13</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> + <span class="special">{</span> + <span class="identifier">logged_type</span> <span class="identifier">b</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">*</span> <span class="number">9</span><span class="special">;</span> + <span class="identifier">b</span> <span class="special">/=</span> <span class="number">10</span><span class="special">;</span> + <span class="identifier">a</span> <span class="special">-=</span> <span class="identifier">b</span><span class="special">;</span> + <span class="special">}</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Final value was: "</span> <span class="special"><<</span> <span class="identifier">a</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + When we examine program output we can clearly see that the diameter of + the interval increases after each subtraction: + </p> +<pre class="programlisting"><span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Assignment</span> <span class="identifier">from</span> <span class="identifier">arithmetic</span> <span class="identifier">type</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">4.33681e-18</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">7.70988e-18</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">9.63735e-18</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.30104e-16</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.30104e-16</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.38537e-16</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">2.54788e-15</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">2.54788e-15</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">2.54863e-15</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">4.84164e-14</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">4.84164e-14</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">4.84221e-14</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">9.19962e-13</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">9.19962e-13</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">9.19966e-13</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.74793e-11</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.74793e-11</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.74793e-11</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">3.32107e-10</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">3.32107e-10</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">3.32107e-10</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">6.31003e-09</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">6.31003e-09</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">6.31003e-09</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.19891e-07</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.19891e-07</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.19891e-07</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">2.27792e-06</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">2.27792e-06</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">2.27792e-06</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">4.32805e-05</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">4.32805e-05</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">4.32805e-05</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0.00082233</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0.00082233</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0.00082233</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0.0156243</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="identifier">nan</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="identifier">Default</span> <span class="identifier">construct</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0.0156243</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0.0156243</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span> +<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0.296861</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span> +<span class="identifier">Final</span> <span class="identifier">value</span> <span class="identifier">was</span><span class="special">:</span> <span class="special">{</span><span class="number">8.51569e-15</span><span class="special">,</span><span class="number">1.14843e-14</span><span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../misc.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../misc.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="debug_adaptor.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/visualizers.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/visualizers.html new file mode 100644 index 0000000000..8b77d657b3 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/visualizers.html @@ -0,0 +1,106 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Visual C++ Debugger Visualizers</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../misc.html" title="Miscellaneous Number Types."> +<link rel="prev" href="debug_adaptor.html" title="debug_adaptor"> +<link rel="next" href="../conversions.html" title="Constructing and Interconverting Between Number Types"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="debug_adaptor.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../misc.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="../conversions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.misc.visualizers"></a><a class="link" href="visualizers.html" title="Visual C++ Debugger Visualizers">Visual C++ + Debugger Visualizers</a> +</h4></div></div></div> +<p> + Let's face it debugger multiprecision numbers is hard - simply because + we can't easily inspect the value of the numbers. Visual C++ provides a + partial solution in the shape of "visualizers" which provide + improved views of complex data structures, these visualizers need to be + added to the <code class="computeroutput"><span class="special">[</span><span class="identifier">Visualizer</span><span class="special">]</span></code> section of <code class="computeroutput"><span class="identifier">autoexp</span><span class="special">.</span><span class="identifier">dat</span></code> + located in the <code class="computeroutput"><span class="identifier">Common7</span><span class="special">/</span><span class="identifier">Packages</span><span class="special">/</span><span class="identifier">Debugger</span></code> + directory of your Visual Studio installation. The actual visualizer code + is in the sandbox <a href="https://svn.boost.org/svn/boost/sandbox/boost_docs/subprojects/DebuggerVisualizers/multiprecision.vis.txt" target="_top">here</a> + - just cut and paste the code into your <code class="computeroutput"><span class="identifier">autoexp</span><span class="special">.</span><span class="identifier">dat</span></code> + file. + </p> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + These visualizers have only been tested with VC10, also given the ability + of buggy visualizers to crash your Visual C++ debugger, make sure you + back up <code class="computeroutput"><span class="identifier">autoexp</span><span class="special">.</span><span class="identifier">dat</span></code> file before using these!! + </p></td></tr> +</table></div> +<p> + The first visualizer provides improved views of <code class="computeroutput"><span class="identifier">debug_adaptor</span></code>: + </p> +<p> + <span class="inlinemediaobject"><img src="../../../../debugger1.png"></span> + </p> +<p> + The next visualizer provides improved views of cpp_int: small numbers are + displayed as actual values, while larger numbers are displayed as an array + of hexadecimal parts, with the most significant part first. + </p> +<p> + Here's what it looks like for small values: + </p> +<p> + <span class="inlinemediaobject"><img src="../../../../debugger4.png"></span> + </p> +<p> + And for larger values: + </p> +<p> + <span class="inlinemediaobject"><img src="../../../../debugger5.png"></span> + </p> +<p> + There is also a <code class="computeroutput"><span class="special">~</span><span class="identifier">raw</span></code> + child member that lets you see the actual members of the class: + </p> +<p> + <span class="inlinemediaobject"><img src="../../../../debugger6.png"></span> + </p> +<p> + The visualizer for <code class="computeroutput"><span class="identifier">cpp_dec_float</span></code> + shows the first few digits of the value in the preview field, and the full + array of digits when you expand the view. As before the <code class="computeroutput"><span class="special">~</span><span class="identifier">raw</span></code> child gives you access to the actual + data members: + </p> +<p> + <span class="inlinemediaobject"><img src="../../../../debugger7.png"></span> + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="debug_adaptor.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../misc.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="../conversions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/mixed.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/mixed.html new file mode 100644 index 0000000000..4eb40a8c7f --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/mixed.html @@ -0,0 +1,177 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Mixed Precision Arithmetic</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../tut.html" title="Tutorial"> +<link rel="prev" href="rounding.html" title="Rounding Rules for Conversions"> +<link rel="next" href="gen_int.html" title="Generic Integer Operations"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="rounding.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="gen_int.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.tut.mixed"></a><a class="link" href="mixed.html" title="Mixed Precision Arithmetic">Mixed Precision Arithmetic</a> +</h3></div></div></div> +<p> + Mixed precision arithmetic is fully supported by the library. + </p> +<p> + There are two different forms: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + Where the operands are of different precision. + </li> +<li class="listitem"> + Where the operands are of the same precision, but yield a higher precision + result. + </li> +</ul></div> +<h5> +<a name="boost_multiprecision.tut.mixed.h0"></a> + <span class="phrase"><a name="boost_multiprecision.tut.mixed.mixing_operands_of_differing_pre"></a></span><a class="link" href="mixed.html#boost_multiprecision.tut.mixed.mixing_operands_of_differing_pre">Mixing + Operands of Differing Precision</a> + </h5> +<p> + If the arguments to a binary operator are of different precision, then the + operation is allowed as long as there is an unambiguous implicit conversion + from one argument type to the other. In all cases the arithmetic is performed + "as if" the lower precision type is promoted to the higher precision + type before applying the operator. However, particular backends may optimise + this and avoid actually creating a temporary if they are able to do so. + </p> +<p> + For example: + </p> +<pre class="programlisting"><span class="identifier">mpfr_float_50</span> <span class="identifier">a</span><span class="special">(</span><span class="number">2</span><span class="special">),</span> <span class="identifier">b</span><span class="special">;</span> +<span class="identifier">mpfr_float_100</span> <span class="identifier">c</span><span class="special">(</span><span class="number">3</span><span class="special">),</span> <span class="identifier">d</span><span class="special">;</span> +<span class="identifier">static_mpfr_float_50</span> <span class="identifier">e</span><span class="special">(</span><span class="number">5</span><span class="special">),</span> <span class="identifier">f</span><span class="special">;</span> +<span class="identifier">mpz_int</span> <span class="identifier">i</span><span class="special">(</span><span class="number">20</span><span class="special">);</span> + +<span class="identifier">d</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">*</span> <span class="identifier">c</span><span class="special">;</span> <span class="comment">// OK, result of operand is an mpfr_float_100.</span> +<span class="identifier">b</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">*</span> <span class="identifier">c</span><span class="special">;</span> <span class="comment">// Error, can't convert the result to an mpfr_float_50 as it will lose digits.</span> +<span class="identifier">f</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">*</span> <span class="identifier">e</span><span class="special">;</span> <span class="comment">// Error, operator is ambiguous, result could be of either type.</span> +<span class="identifier">f</span> <span class="special">=</span> <span class="identifier">e</span> <span class="special">*</span> <span class="identifier">i</span><span class="special">;</span> <span class="comment">// OK, unambiguous conversion from mpz_int to static_mpfr_float_50</span> +</pre> +<h5> +<a name="boost_multiprecision.tut.mixed.h1"></a> + <span class="phrase"><a name="boost_multiprecision.tut.mixed.operands_of_the_same_precision"></a></span><a class="link" href="mixed.html#boost_multiprecision.tut.mixed.operands_of_the_same_precision">Operands + of the Same Precision</a> + </h5> +<p> + Sometimes you want to apply an operator to two arguments of the same precision + in such a way as to obtain a result of higher precision. The most common + situation occurs with fixed precision integers, where you want to multiply + two N-bit numbers to obtain a 2N-bit result. This is supported in this library + by the following free functions: + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ResultType</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Source1</span> <span class="keyword">class</span> <span class="identifier">Source2</span><span class="special">></span> +<span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">add</span><span class="special">(</span><span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source1</span><span class="special">&</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source2</span><span class="special">&</span> <span class="identifier">b</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ResultType</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Source1</span> <span class="keyword">class</span> <span class="identifier">Source2</span><span class="special">></span> +<span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">subtract</span><span class="special">(</span><span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source1</span><span class="special">&</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source2</span><span class="special">&</span> <span class="identifier">b</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">ResultType</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Source1</span> <span class="keyword">class</span> <span class="identifier">Source2</span><span class="special">></span> +<span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">multiply</span><span class="special">(</span><span class="identifier">ResultType</span><span class="special">&</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source1</span><span class="special">&</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source2</span><span class="special">&</span> <span class="identifier">b</span><span class="special">);</span> +</pre> +<p> + These functions apply the named operator to the arguments <span class="emphasis"><em>a</em></span> + and <span class="emphasis"><em>b</em></span> and store the result in <span class="emphasis"><em>result</em></span>, + returning <span class="emphasis"><em>result</em></span>. In all cases they behave "as + if" arguments <span class="emphasis"><em>a</em></span> and <span class="emphasis"><em>b</em></span> were + first promoted to type <code class="computeroutput"><span class="identifier">ResultType</span></code> + before applying the operator, though particular backends may well avoid that + step by way of an optimization. + </p> +<p> + The type <code class="computeroutput"><span class="identifier">ResultType</span></code> must + be an instance of class <code class="computeroutput"><span class="identifier">number</span></code>, + and the types <code class="computeroutput"><span class="identifier">Source1</span></code> and + <code class="computeroutput"><span class="identifier">Source2</span></code> may be either instances + of class <code class="computeroutput"><span class="identifier">number</span></code> or native + integer types. The latter is an optimization that allows arithmetic to be + performed on native integer types producing an extended precision result. + </p> +<p> + For example: + </p> +<pre class="programlisting"><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_int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> +<span class="special">{</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span> + + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint64_t</span> <span class="identifier">i</span> <span class="special">=</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">boost</span><span class="special">::</span><span class="identifier">uint64_t</span><span class="special">>::</span><span class="identifier">max</span><span class="special">)();</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint64_t</span> <span class="identifier">j</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> + + <span class="identifier">uint128_t</span> <span class="identifier">ui128</span><span class="special">;</span> + <span class="identifier">uint256_t</span> <span class="identifier">ui256</span><span class="special">;</span> + <span class="comment">//</span> + <span class="comment">// Start by performing arithmetic on 64-bit integers to yield 128-bit results:</span> + <span class="comment">//</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">hex</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">showbase</span> <span class="special"><<</span> <span class="identifier">i</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">hex</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">showbase</span> <span class="special"><<</span> <span class="identifier">add</span><span class="special">(</span><span class="identifier">ui128</span><span class="special">,</span> <span class="identifier">i</span><span class="special">,</span> <span class="identifier">j</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">hex</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">showbase</span> <span class="special"><<</span> <span class="identifier">multiply</span><span class="special">(</span><span class="identifier">ui128</span><span class="special">,</span> <span class="identifier">i</span><span class="special">,</span> <span class="identifier">i</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="comment">//</span> + <span class="comment">// The try squaring a 128-bit integer to yield a 256-bit result:</span> + <span class="comment">//</span> + <span class="identifier">ui128</span> <span class="special">=</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">uint128_t</span><span class="special">>::</span><span class="identifier">max</span><span class="special">)();</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">hex</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">showbase</span> <span class="special"><<</span> <span class="identifier">multiply</span><span class="special">(</span><span class="identifier">ui256</span><span class="special">,</span> <span class="identifier">ui128</span><span class="special">,</span> <span class="identifier">ui128</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + Produces the output: + </p> +<pre class="programlisting"><span class="number">0</span><span class="identifier">xffffffffffffffff</span> +<span class="number">0</span><span class="identifier">x10000000000000000</span> +<span class="number">0</span><span class="identifier">xFFFFFFFFFFFFFFFE0000000000000001</span> +<span class="number">0</span><span class="identifier">xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE00000000000000000000000000000001</span> +</pre> +<h5> +<a name="boost_multiprecision.tut.mixed.h2"></a> + <span class="phrase"><a name="boost_multiprecision.tut.mixed.backends_with_optimized_mixed_pr"></a></span><a class="link" href="mixed.html#boost_multiprecision.tut.mixed.backends_with_optimized_mixed_pr">Backends + With Optimized Mixed Precision Arithmetic</a> + </h5> +<p> + The following backends have at least some direct support for mixed precision + arithmetic, and therefore avoid creating unnecessary temporaries when using + the interfaces above. Therefore when using these types it's more efficient + to use mixed precision arithmetic, than it is to explicitly cast the operands + to the result type: + </p> +<p> + <a class="link" href="floats/mpfr_float.html" title="mpfr_float">mpfr_float</a>, + <a class="link" href="floats/gmp_float.html" title="gmp_float">gmp_float</a>, + <a class="link" href="ints/cpp_int.html" title="cpp_int">cpp_int</a>. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="rounding.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="gen_int.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/primetest.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/primetest.html new file mode 100644 index 0000000000..a4186e6bb4 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/primetest.html @@ -0,0 +1,116 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Primality Testing</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../tut.html" title="Tutorial"> +<link rel="prev" href="random.html" title="Generating Random Numbers"> +<link rel="next" href="lits.html" title="Literal Types and constexpr Support"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="random.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="lits.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.tut.primetest"></a><a class="link" href="primetest.html" title="Primality Testing">Primality Testing</a> +</h3></div></div></div> +<p> + The library implements a Miller-Rabin test for primality: + </p> +<pre class="programlisting"><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">miller_rabin</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Engine</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">miller_rabin_test</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">n</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">trials</span><span class="special">,</span> <span class="identifier">Engine</span><span class="special">&</span> <span class="identifier">gen</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Engine</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">miller_rabin_test</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">>&</span> <span class="identifier">n</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">trials</span><span class="special">);</span> +</pre> +<p> + These functions perform a Miller-Rabin test for primality, if the result + is <code class="computeroutput"><span class="keyword">false</span></code> then <span class="emphasis"><em>n</em></span> + is definitely composite, while if the result is true then n is probably prime. + The probability to declare a composite n as probable prime is at most 0.25<sup>trials</sup>. + Note that this does not allow a statement about the probability of n being + actually prime (for that, the prior probability would have to be known). + The algorithm used performs some trial divisions to exclude small prime factors, + does one Fermat test to exclude many more composites, and then uses the Miller-Rabin + algorithm straight out of Knuth Vol 2, which recommends 25 trials for a pretty + strong likelihood that <span class="emphasis"><em>n</em></span> is prime. + </p> +<p> + The third optional argument is for a Uniform Random Number Generator from + Boost.Random. When not provided the <code class="computeroutput"><span class="identifier">mt19937</span></code> + generator is used. Note that when producing random primes then you should + probably use a different random number generator to produce candidate prime + numbers for testing, than is used internally by <code class="computeroutput"><span class="identifier">miller_rabin_test</span></code> + for determining whether the value is prime. It also helps of course to seed + the generators with some source of randomness. + </p> +<p> + The following example searches for a prime <code class="computeroutput"><span class="identifier">p</span></code> + for which <code class="computeroutput"><span class="special">(</span><span class="identifier">p</span><span class="special">-</span><span class="number">1</span><span class="special">)/</span><span class="number">2</span></code> is also probably prime: + </p> +<pre class="programlisting"><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_int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<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">miller_rabin</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iomanip</span><span class="special">></span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> +<span class="special">{</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">random</span><span class="special">;</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span> + + <span class="keyword">typedef</span> <span class="identifier">cpp_int</span> <span class="identifier">int_type</span><span class="special">;</span> + <span class="identifier">mt11213b</span> <span class="identifier">base_gen</span><span class="special">(</span><span class="identifier">clock</span><span class="special">());</span> + <span class="identifier">independent_bits_engine</span><span class="special"><</span><span class="identifier">mt11213b</span><span class="special">,</span> <span class="number">256</span><span class="special">,</span> <span class="identifier">int_type</span><span class="special">></span> <span class="identifier">gen</span><span class="special">(</span><span class="identifier">base_gen</span><span class="special">);</span> + <span class="comment">//</span> + <span class="comment">// We must use a different generator for the tests and number generation, otherwise</span> + <span class="comment">// we get false positives.</span> + <span class="comment">//</span> + <span class="identifier">mt19937</span> <span class="identifier">gen2</span><span class="special">(</span><span class="identifier">clock</span><span class="special">());</span> + + <span class="keyword">for</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="number">100000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> + <span class="special">{</span> + <span class="identifier">int_type</span> <span class="identifier">n</span> <span class="special">=</span> <span class="identifier">gen</span><span class="special">();</span> + <span class="keyword">if</span><span class="special">(</span><span class="identifier">miller_rabin_test</span><span class="special">(</span><span class="identifier">n</span><span class="special">,</span> <span class="number">25</span><span class="special">,</span> <span class="identifier">gen2</span><span class="special">))</span> + <span class="special">{</span> + <span class="comment">// Value n is probably prime, see if (n-1)/2 is also prime:</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"We have a probable prime with value: "</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">hex</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">showbase</span> <span class="special"><<</span> <span class="identifier">n</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="keyword">if</span><span class="special">(</span><span class="identifier">miller_rabin_test</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">2</span><span class="special">,</span> <span class="number">25</span><span class="special">,</span> <span class="identifier">gen2</span><span class="special">))</span> + <span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"We have a safe prime with value: "</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">hex</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">showbase</span> <span class="special"><<</span> <span class="identifier">n</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> + <span class="special">}</span> + <span class="special">}</span> + <span class="special">}</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Ooops, no safe primes were found"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="keyword">return</span> <span class="number">1</span><span class="special">;</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="random.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="lits.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/random.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/random.html new file mode 100644 index 0000000000..fa113f9669 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/random.html @@ -0,0 +1,167 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Generating Random Numbers</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../tut.html" title="Tutorial"> +<link rel="prev" href="conversions.html" title="Constructing and Interconverting Between Number Types"> +<link rel="next" href="primetest.html" title="Primality Testing"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="conversions.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="primetest.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.tut.random"></a><a class="link" href="random.html" title="Generating Random Numbers">Generating Random Numbers</a> +</h3></div></div></div> +<p> + Random numbers are generated in conjunction with Boost.Random. However, since + Boost.Random is unaware of <a href="http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic" target="_top">arbitrary + precision</a> numbers, it's necessary to include the header: + </p> +<pre class="programlisting"><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">random</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + In order to act as a bridge between the two libraries. + </p> +<p> + Integers with <span class="emphasis"><em>N</em></span> random bits are generated using <code class="computeroutput"><span class="identifier">independent_bits_engine</span></code>: + </p> +<pre class="programlisting"><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">gmp</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<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">random</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> +<span class="special">{</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">random</span><span class="special">;</span> + + <span class="comment">//</span> + <span class="comment">// Declare our random number generator type, the underlying generator</span> + <span class="comment">// is the Mersenne twister mt19937 engine, and 256 bits are generated:</span> + <span class="comment">//</span> + <span class="keyword">typedef</span> <span class="identifier">independent_bits_engine</span><span class="special"><</span><span class="identifier">mt19937</span><span class="special">,</span> <span class="number">256</span><span class="special">,</span> <span class="identifier">mpz_int</span><span class="special">></span> <span class="identifier">generator_type</span><span class="special">;</span> + <span class="identifier">generator_type</span> <span class="identifier">gen</span><span class="special">;</span> + <span class="comment">//</span> + <span class="comment">// Generate some values:</span> + <span class="comment">//</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">hex</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">showbase</span><span class="special">;</span> + <span class="keyword">for</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="number">10</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">gen</span><span class="special">()</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + Alternatively we can generate integers in a given range using <code class="computeroutput"><span class="identifier">uniform_int_distribution</span></code>, this will invoke + the underlying engine multiple times to build up the required number of bits + in the result: + </p> +<pre class="programlisting"><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">gmp</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<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">random</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> +<span class="special">{</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">random</span><span class="special">;</span> + + <span class="comment">//</span> + <span class="comment">// Generate integers in a given range using uniform_int,</span> + <span class="comment">// the underlying generator is invoked multiple times</span> + <span class="comment">// to generate enough bits:</span> + <span class="comment">//</span> + <span class="identifier">mt19937</span> <span class="identifier">mt</span><span class="special">;</span> + <span class="identifier">uniform_int_distribution</span><span class="special"><</span><span class="identifier">mpz_int</span><span class="special">></span> <span class="identifier">ui</span><span class="special">(</span><span class="number">0</span><span class="special">,</span> <span class="identifier">mpz_int</span><span class="special">(</span><span class="number">1</span><span class="special">)</span> <span class="special"><<</span> <span class="number">256</span><span class="special">);</span> + <span class="comment">//</span> + <span class="comment">// Generate the numbers:</span> + <span class="comment">//</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">hex</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">showbase</span><span class="special">;</span> + <span class="keyword">for</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="number">10</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">ui</span><span class="special">(</span><span class="identifier">mt</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + Floating point values in [0,1) are generated using <code class="computeroutput"><span class="identifier">uniform_01</span></code>, + the trick here is to ensure that the underlying generator produces as many + random bits as there are digits in the floating point type. As above <code class="computeroutput"><span class="identifier">independent_bits_engine</span></code> can be used for + this purpose, note that we also have to convert decimal digits (in the floating + point type) to bits (in the random number generator): + </p> +<pre class="programlisting"><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">gmp</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<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">random</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> +<span class="special">{</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">random</span><span class="special">;</span> + <span class="comment">//</span> + <span class="comment">// We need an underlying generator with at least as many bits as the</span> + <span class="comment">// floating point type to generate numbers in [0, 1) with all the bits</span> + <span class="comment">// in the floating point type randomly filled:</span> + <span class="comment">//</span> + <span class="identifier">uniform_01</span><span class="special"><</span><span class="identifier">mpf_float_50</span><span class="special">></span> <span class="identifier">uf</span><span class="special">;</span> + <span class="identifier">independent_bits_engine</span><span class="special"><</span><span class="identifier">mt19937</span><span class="special">,</span> <span class="number">50L</span><span class="special">*</span><span class="number">1000L</span><span class="special">/</span><span class="number">301L</span><span class="special">,</span> <span class="identifier">mpz_int</span><span class="special">></span> <span class="identifier">gen</span><span class="special">;</span> + <span class="comment">//</span> + <span class="comment">// Generate the values:</span> + <span class="comment">//</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</span><span class="special">(</span><span class="number">50</span><span class="special">);</span> + <span class="keyword">for</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="number">20</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">uf</span><span class="special">(</span><span class="identifier">gen</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + Finally, we can modify the above example to produce numbers distributed according + to some distribution: + </p> +<pre class="programlisting"><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">gmp</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<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">random</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> +<span class="special">{</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">random</span><span class="special">;</span> + <span class="comment">//</span> + <span class="comment">// We can repeat the above example, with other distributions:</span> + <span class="comment">//</span> + <span class="identifier">uniform_real_distribution</span><span class="special"><</span><span class="identifier">mpf_float_50</span><span class="special">></span> <span class="identifier">ur</span><span class="special">(-</span><span class="number">20</span><span class="special">,</span> <span class="number">20</span><span class="special">);</span> + <span class="identifier">gamma_distribution</span><span class="special"><</span><span class="identifier">mpf_float_50</span><span class="special">></span> <span class="identifier">gd</span><span class="special">(</span><span class="number">20</span><span class="special">);</span> + <span class="identifier">independent_bits_engine</span><span class="special"><</span><span class="identifier">mt19937</span><span class="special">,</span> <span class="number">50L</span><span class="special">*</span><span class="number">1000L</span><span class="special">/</span><span class="number">301L</span><span class="special">,</span> <span class="identifier">mpz_int</span><span class="special">></span> <span class="identifier">gen</span><span class="special">;</span> + <span class="comment">//</span> + <span class="comment">// Generate some values:</span> + <span class="comment">//</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</span><span class="special">(</span><span class="number">50</span><span class="special">);</span> + <span class="keyword">for</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="number">20</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">ur</span><span class="special">(</span><span class="identifier">gen</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="keyword">for</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="number">20</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">gd</span><span class="special">(</span><span class="identifier">gen</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="conversions.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="primetest.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/rational.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational.html new file mode 100644 index 0000000000..f29486d993 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational.html @@ -0,0 +1,261 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Rational Number Types</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../tut.html" title="Tutorial"> +<link rel="prev" href="interval/mpfi.html" title="mpfi_float"> +<link rel="next" href="rational/cpp_rational.html" title="cpp_rational"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="interval/mpfi.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="rational/cpp_rational.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.tut.rational"></a><a class="link" href="rational.html" title="Rational Number Types">Rational Number Types</a> +</h3></div></div></div> +<div class="toc"><dl class="toc"> +<dt><span class="section"><a href="rational/cpp_rational.html">cpp_rational</a></span></dt> +<dt><span class="section"><a href="rational/gmp_rational.html">gmp_rational</a></span></dt> +<dt><span class="section"><a href="rational/tommath_rational.html">tommath_rational</a></span></dt> +<dt><span class="section"><a href="rational/br.html">Use With Boost.Rational</a></span></dt> +<dt><span class="section"><a href="rational/rational_adaptor.html">rational_adaptor</a></span></dt> +</dl></div> +<p> + The following back-ends provide rational number arithmetic: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend Type + </p> + </th> +<th> + <p> + Header + </p> + </th> +<th> + <p> + Radix + </p> + </th> +<th> + <p> + Dependencies + </p> + </th> +<th> + <p> + Pros + </p> + </th> +<th> + <p> + Cons + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">cpp_rational</span></code> + </p> + </td> +<td> + <p> + boost/multiprecision/cpp_int.hpp + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + None + </p> + </td> +<td> + <p> + An all C++ Boost-licensed implementation. + </p> + </td> +<td> + <p> + Slower than <a href="http://gmplib.org" target="_top">GMP</a>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">gmp_rational</span></code> + </p> + </td> +<td> + <p> + boost/multiprecision/gmp.hpp + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + <a href="http://gmplib.org" target="_top">GMP</a> + </p> + </td> +<td> + <p> + Very fast and efficient back-end. + </p> + </td> +<td> + <p> + Dependency on GNU licensed <a href="http://gmplib.org" target="_top">GMP</a> + library. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">tommath_rational</span></code> + </p> + </td> +<td> + <p> + boost/multiprecision/tommath.hpp + </p> + </td> +<td> + <p> + 2 + </p> + </td> +<td> + <p> + <a href="http://libtom.org/?page=features&newsitems=5&whatfile=ltm" target="_top">libtommath</a> + </p> + </td> +<td> + <p> + All C/C++ implementation that's Boost Software Licence compatible. + </p> + </td> +<td> + <p> + Slower than <a href="http://gmplib.org" target="_top">GMP</a>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">rational_adaptor</span></code> + </p> + </td> +<td> + <p> + boost/multiprecision/rational_adaptor.hpp + </p> + </td> +<td> + <p> + N/A + </p> + </td> +<td> + <p> + none + </p> + </td> +<td> + <p> + All C++ adaptor that allows any integer back-end type to be used + as a rational type. + </p> + </td> +<td> + <p> + Requires an underlying integer back-end type. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">rational</span></code> + </p> + </td> +<td> + <p> + boost/rational.hpp + </p> + </td> +<td> + <p> + N/A + </p> + </td> +<td> + <p> + None + </p> + </td> +<td> + <p> + A C++ rational number type that can used with any <code class="computeroutput"><span class="identifier">number</span></code> integer type. + </p> + </td> +<td> + <p> + The expression templates used by <code class="computeroutput"><span class="identifier">number</span></code> + end up being "hidden" inside <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">rational</span></code>: + performance may well suffer as a result. + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="interval/mpfi.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="rational/cpp_rational.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/br.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/br.html new file mode 100644 index 0000000000..2f331f6f9b --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/br.html @@ -0,0 +1,51 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Use With Boost.Rational</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../rational.html" title="Rational Number Types"> +<link rel="prev" href="tommath_rational.html" title="tommath_rational"> +<link rel="next" href="rational_adaptor.html" title="rational_adaptor"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="tommath_rational.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rational.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="rational_adaptor.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.rational.br"></a><a class="link" href="br.html" title="Use With Boost.Rational">Use With Boost.Rational</a> +</h4></div></div></div> +<p> + All of the integer types in this library can be used as template arguments + to <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">rational</span><span class="special"><</span><span class="identifier">IntType</span><span class="special">></span></code>. + </p> +<p> + Note that using the library in this way largely negates the effect of the + expression templates in <code class="computeroutput"><span class="identifier">number</span></code>. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="tommath_rational.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rational.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="rational_adaptor.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/cpp_rational.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/cpp_rational.html new file mode 100644 index 0000000000..6a5756867a --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/cpp_rational.html @@ -0,0 +1,123 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>cpp_rational</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../rational.html" title="Rational Number Types"> +<link rel="prev" href="../rational.html" title="Rational Number Types"> +<link rel="next" href="gmp_rational.html" title="gmp_rational"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../rational.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rational.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="gmp_rational.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.rational.cpp_rational"></a><a class="link" href="cpp_rational.html" title="cpp_rational">cpp_rational</a> +</h4></div></div></div> +<p> + <code class="computeroutput"><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_int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">typedef</span> <span class="identifier">rational_adaptor</span><span class="special"><</span><span class="identifier">cpp_int_backend</span><span class="special"><></span> <span class="special">></span> <span class="identifier">cpp_rational_backend</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">cpp_rational_backend</span><span class="special">></span> <span class="identifier">cpp_rational</span><span class="special">;</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> +</pre> +<p> + The <code class="computeroutput"><span class="identifier">cpp_rational_backend</span></code> + type is used via the typedef <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_rational</span></code>. + It provides a rational number type that is a drop-in replacement for the + native C++ number types, but with unlimited precision. + </p> +<p> + As well as the usual conversions from arithmetic and string types, instances + of <code class="computeroutput"><span class="identifier">cpp_rational</span></code> are copy + constructible and assignable from type <code class="computeroutput"><span class="identifier">cpp_int</span></code>. + </p> +<p> + There is also a two argument constructor that accepts a numerator and denominator: + both of type <code class="computeroutput"><span class="identifier">cpp_int</span></code>. + </p> +<p> + There are also non-member functions: + </p> +<pre class="programlisting"><span class="identifier">cpp_int</span> <span class="identifier">numerator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">cpp_rational</span><span class="special">&);</span> +<span class="identifier">cpp_int</span> <span class="identifier">denominator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">cpp_rational</span><span class="special">&);</span> +</pre> +<p> + which return the numerator and denominator of the number. + </p> +<p> + Things you should know when using this type: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + Default constructed <code class="computeroutput"><span class="identifier">cpp_rational</span></code>s + have the value zero. + </li> +<li class="listitem"> + Division by zero results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> + being thrown. + </li> +<li class="listitem"> + Conversion from a string results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + being thrown if the string can not be interpreted as a valid rational + number. + </li> +</ul></div> +<h6> +<a name="boost_multiprecision.tut.rational.cpp_rational.h0"></a> + <span class="phrase"><a name="boost_multiprecision.tut.rational.cpp_rational.example"></a></span><a class="link" href="cpp_rational.html#boost_multiprecision.tut.rational.cpp_rational.example">Example:</a> + </h6> +<pre class="programlisting"><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_int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> +<span class="special">{</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span> + + <span class="identifier">cpp_rational</span> <span class="identifier">v</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> + + <span class="comment">// Do some arithmetic:</span> + <span class="keyword">for</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><=</span> <span class="number">1000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> + <span class="identifier">v</span> <span class="special">*=</span> <span class="identifier">i</span><span class="special">;</span> + <span class="identifier">v</span> <span class="special">/=</span> <span class="number">10</span><span class="special">;</span> + + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">v</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// prints 1000! / 10</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">numerator</span><span class="special">(</span><span class="identifier">v</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">denominator</span><span class="special">(</span><span class="identifier">v</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + + <span class="identifier">cpp_rational</span> <span class="identifier">w</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="number">3</span><span class="special">);</span> <span class="comment">// component wise constructor</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">w</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// prints 2/3</span> + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../rational.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rational.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="gmp_rational.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/gmp_rational.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/gmp_rational.html new file mode 100644 index 0000000000..6800cc4264 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/gmp_rational.html @@ -0,0 +1,156 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>gmp_rational</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../rational.html" title="Rational Number Types"> +<link rel="prev" href="cpp_rational.html" title="cpp_rational"> +<link rel="next" href="tommath_rational.html" title="tommath_rational"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="cpp_rational.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rational.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="tommath_rational.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.rational.gmp_rational"></a><a class="link" href="gmp_rational.html" title="gmp_rational">gmp_rational</a> +</h4></div></div></div> +<p> + <code class="computeroutput"><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">gmp</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">class</span> <span class="identifier">gmp_rational</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">gmp_rational</span> <span class="special">></span> <span class="identifier">mpq_rational</span><span class="special">;</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> +</pre> +<p> + The <code class="computeroutput"><span class="identifier">gmp_rational</span></code> back-end + is used via the typedef <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">mpq_rational</span></code>. + It acts as a thin wrapper around the <a href="http://gmplib.org" target="_top">GMP</a> + <code class="computeroutput"><span class="identifier">mpq_t</span></code> to provide a rational + number type that is a drop-in replacement for the native C++ number types, + but with unlimited precision. + </p> +<p> + As well as the usual conversions from arithmetic and string types, instances + of <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">gmp_rational</span><span class="special">></span></code> + are copy constructible and assignable from: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + The <a href="http://gmplib.org" target="_top">GMP</a> native types: <code class="computeroutput"><span class="identifier">mpz_t</span></code>, <code class="computeroutput"><span class="identifier">mpq_t</span></code>. + </li> +<li class="listitem"> + <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">gmp_int</span><span class="special">></span></code>. + </li> +</ul></div> +<p> + There is also a two-argument constructor that accepts a numerator and denominator + (both of type <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">gmp_int</span><span class="special">></span></code>). + </p> +<p> + There are also non-member functions: + </p> +<pre class="programlisting"><span class="identifier">mpz_int</span> <span class="identifier">numerator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">mpq_rational</span><span class="special">&);</span> +<span class="identifier">mpz_int</span> <span class="identifier">denominator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">mpq_rational</span><span class="special">&);</span> +</pre> +<p> + which return the numerator and denominator of the number. + </p> +<p> + It's also possible to access the underlying <code class="computeroutput"><span class="identifier">mpq_t</span></code> + via the <code class="computeroutput"><span class="identifier">data</span><span class="special">()</span></code> + member function of <code class="computeroutput"><span class="identifier">mpq_rational</span></code>. + </p> +<p> + Things you should know when using this type: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + Default constructed <code class="computeroutput"><span class="identifier">mpq_rational</span></code>s + have the value zero (this is the <a href="http://gmplib.org" target="_top">GMP</a> + default behavior). + </li> +<li class="listitem"> + Division by zero results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> + being thrown. + </li> +<li class="listitem"> + Conversion from a string results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + being thrown if the string can not be interpreted as a valid rational + number. + </li> +<li class="listitem"> + No changes are made to the <a href="http://gmplib.org" target="_top">GMP</a> + library's global settings, so this type can coexist with existing + <a href="http://gmplib.org" target="_top">GMP</a> code. + </li> +<li class="listitem"> + The code can equally be used with <a href="http://mpir.org/" target="_top">MPIR</a> + as the underlying library - indeed that is the preferred option on + Win32. + </li> +</ul></div> +<h6> +<a name="boost_multiprecision.tut.rational.gmp_rational.h0"></a> + <span class="phrase"><a name="boost_multiprecision.tut.rational.gmp_rational.example"></a></span><a class="link" href="gmp_rational.html#boost_multiprecision.tut.rational.gmp_rational.example">Example:</a> + </h6> +<pre class="programlisting"><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">gmp</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<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">gmp</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> +<span class="special">{</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span> + + <span class="identifier">mpq_rational</span> <span class="identifier">v</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> + + <span class="comment">// Do some arithmetic:</span> + <span class="keyword">for</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><=</span> <span class="number">1000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> + <span class="identifier">v</span> <span class="special">*=</span> <span class="identifier">i</span><span class="special">;</span> + <span class="identifier">v</span> <span class="special">/=</span> <span class="number">10</span><span class="special">;</span> + + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">v</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// prints 1000! / 10</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">numerator</span><span class="special">(</span><span class="identifier">v</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">denominator</span><span class="special">(</span><span class="identifier">v</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + + <span class="identifier">mpq_rational</span> <span class="identifier">w</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="number">3</span><span class="special">);</span> <span class="comment">// component wise constructor</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">w</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// prints 2/3</span> + + <span class="comment">// Access the underlying data:</span> + <span class="identifier">mpq_t</span> <span class="identifier">q</span><span class="special">;</span> + <span class="identifier">mpq_init</span><span class="special">(</span><span class="identifier">q</span><span class="special">);</span> + <span class="identifier">mpq_set</span><span class="special">(</span><span class="identifier">q</span><span class="special">,</span> <span class="identifier">v</span><span class="special">.</span><span class="identifier">backend</span><span class="special">().</span><span class="identifier">data</span><span class="special">());</span> + <span class="identifier">mpq_clear</span><span class="special">(</span><span class="identifier">q</span><span class="special">);</span> + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="cpp_rational.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rational.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="tommath_rational.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/rational_adapter.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/rational_adapter.html new file mode 100644 index 0000000000..8ef5da4274 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/rational_adapter.html @@ -0,0 +1,67 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>rational_adaptor</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.77.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../rational.html" title="Rational Number Types"> +<link rel="prev" href="br.html" title="Use With Boost.Rational"> +<link rel="next" href="../misc.html" title="Miscellaneous Number Types."> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="br.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rational.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="../misc.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section boost_multiprecision_tut_rational_rational_adaptor"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.rational.rational_adaptor"></a><a class="link" href="rational_adaptor.html" title="rational_adaptor">rational_adaptor</a> +</h4></div></div></div> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">IntBackend</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">rational_adpater</span><span class="special">;</span> + +<span class="special">}}</span> +</pre> +<p> + The class template <code class="computeroutput"><span class="identifier">rational_adaptor</span></code> + is a back-end for <code class="computeroutput"><span class="identifier">number</span></code> + which converts any existing integer back-end into a rational-number back-end. + </p> +<p> + So for example, given an integer back-end type <code class="computeroutput"><span class="identifier">MyIntegerBackend</span></code>, + the use would be something like: + </p> +<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">MyIntegerBackend</span><span class="special">></span> <span class="identifier">MyInt</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">rational_adaptor</span><span class="special"><</span><span class="identifier">MyIntegerBackend</span><span class="special">></span> <span class="special">></span> <span class="identifier">MyRational</span><span class="special">;</span> + +<span class="identifier">MyRational</span> <span class="identifier">r</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span> +<span class="identifier">r</span> <span class="special">/=</span> <span class="number">3</span><span class="special">;</span> +<span class="identifier">MyInt</span> <span class="identifier">i</span> <span class="special">=</span> <span class="identifier">numerator</span><span class="special">(</span><span class="identifier">r</span><span class="special">);</span> +<span class="identifier">assert</span><span class="special">(</span><span class="identifier">i</span> <span class="special">==</span> <span class="number">2</span><span class="special">);</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2012 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="br.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rational.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="../misc.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/rational_adaptor.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/rational_adaptor.html new file mode 100644 index 0000000000..26623160ee --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/rational_adaptor.html @@ -0,0 +1,67 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>rational_adaptor</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../rational.html" title="Rational Number Types"> +<link rel="prev" href="br.html" title="Use With Boost.Rational"> +<link rel="next" href="../misc.html" title="Miscellaneous Number Types."> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="br.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rational.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="../misc.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.rational.rational_adaptor"></a><a class="link" href="rational_adaptor.html" title="rational_adaptor">rational_adaptor</a> +</h4></div></div></div> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">IntBackend</span><span class="special">></span> +<span class="keyword">class</span> <span class="identifier">rational_adpater</span><span class="special">;</span> + +<span class="special">}}</span> +</pre> +<p> + The class template <code class="computeroutput"><span class="identifier">rational_adaptor</span></code> + is a back-end for <code class="computeroutput"><span class="identifier">number</span></code> + which converts any existing integer back-end into a rational-number back-end. + </p> +<p> + So for example, given an integer back-end type <code class="computeroutput"><span class="identifier">MyIntegerBackend</span></code>, + the use would be something like: + </p> +<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">MyIntegerBackend</span><span class="special">></span> <span class="identifier">MyInt</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">rational_adaptor</span><span class="special"><</span><span class="identifier">MyIntegerBackend</span><span class="special">></span> <span class="special">></span> <span class="identifier">MyRational</span><span class="special">;</span> + +<span class="identifier">MyRational</span> <span class="identifier">r</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span> +<span class="identifier">r</span> <span class="special">/=</span> <span class="number">3</span><span class="special">;</span> +<span class="identifier">MyInt</span> <span class="identifier">i</span> <span class="special">=</span> <span class="identifier">numerator</span><span class="special">(</span><span class="identifier">r</span><span class="special">);</span> +<span class="identifier">assert</span><span class="special">(</span><span class="identifier">i</span> <span class="special">==</span> <span class="number">2</span><span class="special">);</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="br.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rational.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="../misc.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/tommath_rational.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/tommath_rational.html new file mode 100644 index 0000000000..5df03879e5 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/tommath_rational.html @@ -0,0 +1,130 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>tommath_rational</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../rational.html" title="Rational Number Types"> +<link rel="prev" href="gmp_rational.html" title="gmp_rational"> +<link rel="next" href="br.html" title="Use With Boost.Rational"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="gmp_rational.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rational.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="br.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="boost_multiprecision.tut.rational.tommath_rational"></a><a class="link" href="tommath_rational.html" title="tommath_rational">tommath_rational</a> +</h4></div></div></div> +<p> + <code class="computeroutput"><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">tommath</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">multiprecision</span><span class="special">{</span> + +<span class="keyword">typedef</span> <span class="identifier">rational_adpater</span><span class="special"><</span><span class="identifier">tommath_int</span><span class="special">></span> <span class="identifier">tommath_rational</span><span class="special">;</span> +<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special"><</span><span class="identifier">tommath_rational</span> <span class="special">></span> <span class="identifier">tom_rational</span><span class="special">;</span> + +<span class="special">}}</span> <span class="comment">// namespaces</span> +</pre> +<p> + The <code class="computeroutput"><span class="identifier">tommath_rational</span></code> back-end + is used via the typedef <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">tom_rational</span></code>. + It acts as a thin wrapper around <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">rational</span><span class="special"><</span><span class="identifier">tom_int</span><span class="special">></span></code> to provide a rational number type that + is a drop-in replacement for the native C++ number types, but with unlimited + precision. + </p> +<p> + The advantage of using this type rather than <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">rational</span><span class="special"><</span><span class="identifier">tom_int</span><span class="special">></span></code> directly, is that it is expression-template + enabled, greatly reducing the number of temporaries created in complex + expressions. + </p> +<p> + There are also non-member functions: + </p> +<pre class="programlisting"><span class="identifier">tom_int</span> <span class="identifier">numerator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">tom_rational</span><span class="special">&);</span> +<span class="identifier">tom_int</span> <span class="identifier">denominator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">tom_rational</span><span class="special">&);</span> +</pre> +<p> + which return the numerator and denominator of the number. + </p> +<p> + Things you should know when using this type: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + Default constructed <code class="computeroutput"><span class="identifier">tom_rational</span></code>s + have the value zero (this the inherited Boost.Rational behavior). + </li> +<li class="listitem"> + Division by zero results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> + being thrown. + </li> +<li class="listitem"> + Conversion from a string results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> + being thrown if the string can not be interpreted as a valid rational + number. + </li> +<li class="listitem"> + No changes are made to <a href="http://libtom.org/?page=features&newsitems=5&whatfile=ltm" target="_top">libtommath</a>'s + global state, so this type can safely coexist with other <a href="http://libtom.org/?page=features&newsitems=5&whatfile=ltm" target="_top">libtommath</a> + code. + </li> +<li class="listitem"> + Performance of this type has been found to be pretty poor - this need + further investigation - but it appears that Boost.Rational needs some + improvement in this area. + </li> +</ul></div> +<h6> +<a name="boost_multiprecision.tut.rational.tommath_rational.h0"></a> + <span class="phrase"><a name="boost_multiprecision.tut.rational.tommath_rational.example"></a></span><a class="link" href="tommath_rational.html#boost_multiprecision.tut.rational.tommath_rational.example">Example:</a> + </h6> +<pre class="programlisting"><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">tommath</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> +<span class="special">{</span> + <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">;</span> + + <span class="identifier">tom_rational</span> <span class="identifier">v</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> + + <span class="comment">// Do some arithmetic:</span> + <span class="keyword">for</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><=</span> <span class="number">1000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> + <span class="identifier">v</span> <span class="special">*=</span> <span class="identifier">i</span><span class="special">;</span> + <span class="identifier">v</span> <span class="special">/=</span> <span class="number">10</span><span class="special">;</span> + + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">v</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// prints 1000! / 10</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">numerator</span><span class="special">(</span><span class="identifier">v</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">denominator</span><span class="special">(</span><span class="identifier">v</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + + <span class="identifier">tom_rational</span> <span class="identifier">w</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="number">3</span><span class="special">);</span> <span class="comment">// Component wise constructor</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">w</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// prints 2/3</span> + + <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> +<span class="special">}</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="gmp_rational.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rational.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="br.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/rounding.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/rounding.html new file mode 100644 index 0000000000..9626a37b66 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/rounding.html @@ -0,0 +1,191 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Rounding Rules for Conversions</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../tut.html" title="Tutorial"> +<link rel="prev" href="lits.html" title="Literal Types and constexpr Support"> +<link rel="next" href="mixed.html" title="Mixed Precision Arithmetic"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="lits.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="mixed.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.tut.rounding"></a><a class="link" href="rounding.html" title="Rounding Rules for Conversions">Rounding Rules for + Conversions</a> +</h3></div></div></div> +<p> + As a general rule, all conversions between unrelated types are performed + using basic arithmetic operations, therefore conversions are either exact, + or follow the same rounding rules as arithmetic for the type in question. + </p> +<p> + The following table summarises the situation for conversions from native + types: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Backend + </p> + </th> +<th> + <p> + Rounding Rules + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <a class="link" href="ints/cpp_int.html" title="cpp_int">cpp_int</a> + </p> + </td> +<td> + <p> + Conversions from integer types are exact if the target has sufficient + precision, otherwise they truncate to the first 2^MaxBits bits + (modulo arithmetic). Conversions from floating point types are + truncating to the nearest integer. + </p> + </td> +</tr> +<tr> +<td> + <p> + <a class="link" href="ints/gmp_int.html" title="gmp_int">gmp_int</a> + </p> + </td> +<td> + <p> + Conversions are performed by the GMP library except for conversion + from <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">double</span></code> + which is truncating. + </p> + </td> +</tr> +<tr> +<td> + <p> + <a class="link" href="ints/tom_int.html" title="tom_int">tom_int</a> + </p> + </td> +<td> + <p> + Conversions from floating point types are truncating, all others + are performed by libtommath and are exact. + </p> + </td> +</tr> +<tr> +<td> + <p> + <a class="link" href="floats/gmp_float.html" title="gmp_float">gmp_float</a> + </p> + </td> +<td> + <p> + Conversions are performed by the GMP library except for conversion + from <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">double</span></code> + which should be exact provided the target type has as much precision + as a <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">double</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <a class="link" href="floats/mpfr_float.html" title="mpfr_float">mpfr_float</a> + </p> + </td> +<td> + <p> + All conversions are performed by the underlying MPFR library. + </p> + </td> +</tr> +<tr> +<td> + <p> + <a class="link" href="floats/cpp_dec_float.html" title="cpp_dec_float">cpp_dec_float</a> + </p> + </td> +<td> + <p> + All conversions are performed using basic arithmetic operations + and are truncating. + </p> + </td> +</tr> +<tr> +<td> + <p> + <a class="link" href="rational/gmp_rational.html" title="gmp_rational">gmp_rational</a> + </p> + </td> +<td> + <p> + See <a class="link" href="ints/gmp_int.html" title="gmp_int">gmp_int</a> + </p> + </td> +</tr> +<tr> +<td> + <p> + <a class="link" href="rational/cpp_rational.html" title="cpp_rational">cpp_rational</a> + </p> + </td> +<td> + <p> + See <a class="link" href="ints/cpp_int.html" title="cpp_int">cpp_int</a> + </p> + </td> +</tr> +<tr> +<td> + <p> + <a class="link" href="rational/tommath_rational.html" title="tommath_rational">tommath_rational</a> + </p> + </td> +<td> + <p> + See <a class="link" href="ints/tom_int.html" title="tom_int">tom_int</a> + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="lits.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="mixed.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/serial.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/serial.html new file mode 100644 index 0000000000..667dcea832 --- /dev/null +++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/serial.html @@ -0,0 +1,64 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Boost.Serialization Support</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="up" href="../tut.html" title="Tutorial"> +<link rel="prev" href="gen_int.html" title="Generic Integer Operations"> +<link rel="next" href="limits.html" title="Numeric Limits"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="gen_int.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="limits.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="boost_multiprecision.tut.serial"></a><a class="link" href="serial.html" title="Boost.Serialization Support">Boost.Serialization + Support</a> +</h3></div></div></div> +<p> + Support for serialization comes in two forms: + </p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"> + Classes <a class="link" href="../ref/number.html" title="number">number</a>, + <a class="link" href="misc/debug_adaptor.html" title="debug_adaptor">debug_adaptor</a>, + <a class="link" href="misc/logged_adaptor.html" title="logged_adaptor">logged_adaptor</a> + and <a class="link" href="rational/rational_adaptor.html" title="rational_adaptor">rational_adaptor</a> + have "pass through" serialization support which requires the + underlying backend to be serializable. + </li> +<li class="listitem"> + Backends <a class="link" href="ints/cpp_int.html" title="cpp_int">cpp_int</a>, + <a class="link" href="floats/cpp_bin_float.html" title="cpp_bin_float">cpp_bin_float</a>, + <a class="link" href="floats/cpp_dec_float.html" title="cpp_dec_float">cpp_dec_float</a> + and <a class="link" href="floats/float128.html" title="float128">float128</a> + have full support for Boost.Serialization. + </li> +</ul></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2013 John Maddock and Christopher Kormanyos<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="gen_int.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../tut.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="limits.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/multiprecision/doc/html/index.html b/libs/multiprecision/doc/html/index.html new file mode 100644 index 0000000000..c39180a691 --- /dev/null +++ b/libs/multiprecision/doc/html/index.html @@ -0,0 +1,172 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Chapter 1. Boost.Multiprecision</title> +<link rel="stylesheet" href="../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> +<link rel="home" href="index.html" title="Chapter 1. Boost.Multiprecision"> +<link rel="next" href="boost_multiprecision/intro.html" title="Introduction"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../boost.png"></td> +<td align="center"><a href="../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"><a accesskey="n" href="boost_multiprecision/intro.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a></div> +<div class="chapter"> +<div class="titlepage"><div> +<div><h2 class="title"> +<a name="boost_multiprecision"></a>Chapter 1. Boost.Multiprecision</h2></div> +<div><div class="author"><h3 class="author"> +<span class="firstname">John</span> <span class="surname">Maddock</span> +</h3></div></div> +<div><div class="author"><h3 class="author"> +<span class="firstname">Christopher</span> <span class="surname">Kormanyos</span> +</h3></div></div> +<div><p class="copyright">Copyright © 2002-2013 John Maddock and Christopher Kormanyos</p></div> +<div><div class="legalnotice"> +<a name="boost_multiprecision.legal"></a><p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + 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>) + </p> +</div></div> +</div></div> +<div class="toc"> +<p><b>Table of Contents</b></p> +<dl class="toc"> +<dt><span class="section"><a href="boost_multiprecision/intro.html">Introduction</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut.html">Tutorial</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_multiprecision/tut/ints.html">Integer Types</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_multiprecision/tut/ints/cpp_int.html">cpp_int</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/ints/gmp_int.html">gmp_int</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/ints/tom_int.html">tom_int</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/ints/egs.html">Examples</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_multiprecision/tut/ints/egs/factorials.html">Factorials</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/ints/egs/bitops.html">Bit Operations</a></span></dt> +</dl></dd> +</dl></dd> +<dt><span class="section"><a href="boost_multiprecision/tut/floats.html">Floating Point Numbers</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_multiprecision/tut/floats/cpp_bin_float.html">cpp_bin_float</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/floats/cpp_dec_float.html">cpp_dec_float</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/floats/gmp_float.html">gmp_float</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/floats/mpfr_float.html">mpfr_float</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/floats/float128.html">float128</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/floats/fp_eg.html">Examples</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_multiprecision/tut/floats/fp_eg/aos.html">Area of + Circle</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/floats/fp_eg/jel.html">Defining + a Special Function.</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/floats/fp_eg/nd.html">Calculating + a Derivative</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/floats/fp_eg/gi.html">Calculating + an Integral</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/floats/fp_eg/poly_eg.html">Polynomial + Evaluation</a></span></dt> +</dl></dd> +</dl></dd> +<dt><span class="section"><a href="boost_multiprecision/tut/interval.html">Interval Number Types</a></span></dt> +<dd><dl><dt><span class="section"><a href="boost_multiprecision/tut/interval/mpfi.html">mpfi_float</a></span></dt></dl></dd> +<dt><span class="section"><a href="boost_multiprecision/tut/rational.html">Rational Number Types</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_multiprecision/tut/rational/cpp_rational.html">cpp_rational</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/rational/gmp_rational.html">gmp_rational</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/rational/tommath_rational.html">tommath_rational</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/rational/br.html">Use With Boost.Rational</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/rational/rational_adaptor.html">rational_adaptor</a></span></dt> +</dl></dd> +<dt><span class="section"><a href="boost_multiprecision/tut/misc.html">Miscellaneous Number Types.</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_multiprecision/tut/misc/logged_adaptor.html">logged_adaptor</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/misc/debug_adaptor.html">debug_adaptor</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/misc/visualizers.html">Visual C++ + Debugger Visualizers</a></span></dt> +</dl></dd> +<dt><span class="section"><a href="boost_multiprecision/tut/conversions.html">Constructing and + Interconverting Between Number Types</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/random.html">Generating Random Numbers</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/primetest.html">Primality Testing</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/lits.html">Literal Types and <code class="computeroutput"><span class="keyword">constexpr</span></code> Support</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/rounding.html">Rounding Rules for + Conversions</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/mixed.html">Mixed Precision Arithmetic</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/gen_int.html">Generic Integer Operations</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/serial.html">Boost.Serialization + Support</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/limits.html">Numeric Limits</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_multiprecision/tut/limits/constants.html">std::numeric_limits<> + constants</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/limits/functions.html">std::numeric_limits<> + functions</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/limits/limits32.html">Numeric limits + for 32-bit platform</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/tut/limits/how_to_tell.html">How to + Determine the Kind of a Number From <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code></a></span></dt> +</dl></dd> +<dt><span class="section"><a href="boost_multiprecision/tut/input_output.html">Input Output</a></span></dt> +</dl></dd> +<dt><span class="section"><a href="boost_multiprecision/ref.html">Reference</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_multiprecision/ref/number.html">number</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/ref/cpp_int_ref.html">cpp_int</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/ref/gmp_int_ref.html">gmp_int</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/ref/tom_int_ref.html">tom_int</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/ref/mpf_ref.html">gmp_float</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/ref/mpfr_ref.html">mpfr_float_backend</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/ref/cpp_bin_float_ref.html">cpp_bin_float</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/ref/cpp_dec_ref.html">cpp_dec_float</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/ref/internals.html">Internal Support + Code</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/ref/backendconc.html">Backend Requirements</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/ref/headers.html">Header File Structure</a></span></dt> +</dl></dd> +<dt><span class="section"><a href="boost_multiprecision/perf.html">Performance Comparison</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_multiprecision/perf/overhead.html">The Overhead in the + Number Class Wrapper</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/perf/realworld.html">Floating-Point Real + World Tests</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/perf/int_real_world.html">Integer Real + World Tests</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/perf/float_performance.html">Float Algorithm + Performance</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/perf/integer_performance.html">Integer + Algorithm Performance</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/perf/rational_performance.html">Rational + Type Performance</a></span></dt> +</dl></dd> +<dt><span class="section"><a href="boost_multiprecision/map.html">Roadmap</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_multiprecision/map/hist.html">History</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/map/todo.html">TODO</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/map/faq.html">FAQ</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/map/ack.html">Acknowledgements</a></span></dt> +</dl></dd> +<dt><span class="section"><a href="boost_multiprecision/indexes.html">Indexes</a></span></dt> +<dd><dl> +<dt><span class="section"><a href="boost_multiprecision/indexes/s01.html">Function Index</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/indexes/s02.html">Class Index</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/indexes/s03.html">Typedef Index</a></span></dt> +<dt><span class="section"><a href="boost_multiprecision/indexes/s04.html">Index</a></span></dt> +</dl></dd> +</dl> +</div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"><p><small>Last revised: October 17, 2014 at 17:53:54 GMT</small></p></td> +<td align="right"><div class="copyright-footer"></div></td> +</tr></table> +<hr> +<div class="spirit-nav"><a accesskey="n" href="boost_multiprecision/intro.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a></div> +</body> +</html> |