mirror of
https://github.com/boostorg/multiprecision.git
synced 2026-02-14 12:52:17 +00:00
696 lines
101 KiB
HTML
696 lines
101 KiB
HTML
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
|
|
<title>mp_number</title>
|
|
<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
|
|
<meta name="generator" content="DocBook XSL Stylesheets V1.76.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="backendconc.html" title="Backend Requirements">
|
|
</head>
|
|
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
|
|
<div class="spirit-nav">
|
|
<a accesskey="p" href="../ref.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="backendconc.html"><img src="../../images/next.png" alt="Next"></a>
|
|
</div>
|
|
<div class="section boost_multiprecision_ref_mp_number">
|
|
<div class="titlepage"><div><div><h3 class="title">
|
|
<a name="boost_multiprecision.ref.mp_number"></a><a class="link" href="mp_number.html" title="mp_number">mp_number</a>
|
|
</h3></div></div></div>
|
|
<h5>
|
|
<a name="boost_multiprecision.ref.mp_number.h0"></a>
|
|
<span><a name="boost_multiprecision.ref.mp_number.synopsis"></a></span><a class="link" href="mp_number.html#boost_multiprecision.ref.mp_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">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">ExpressionTemplates</span> <span class="special">=</span> <span class="keyword">true</span><span class="special">></span>
|
|
<span class="keyword">class</span> <span class="identifier">mp_number</span>
|
|
<span class="special">{</span>
|
|
<span class="identifier">mp_number</span><span class="special">();</span>
|
|
<span class="identifier">mp_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">mp_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="comment">// Member operators</span>
|
|
<span class="identifier">mp_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">mp_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">mp_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">mp_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">mp_number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++();</span>
|
|
<span class="identifier">mp_number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">--();</span>
|
|
<span class="identifier">mp_number</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span>
|
|
<span class="identifier">mp_number</span> <span class="keyword">operator</span><span class="special">--(</span><span class="keyword">int</span><span class="special">);</span>
|
|
|
|
<span class="identifier">mp_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">mp_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">mp_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">mp_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">mp_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">mp_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">mp_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="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">mp_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_arithmetic</span><span class="special"><</span><span class="identifier">V</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="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="keyword">bool</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">mp_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">mp_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="keyword">bool</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">mp_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="keyword">bool</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">mp_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">// 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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">int</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>mp_number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">int</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>mp_number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>mp_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>mp_number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>mp_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>mp_number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>mp_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="comment">// Integer specific functions:</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">bool</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span>
|
|
<span class="keyword">bool</span> <span class="identifier">divide_qr</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>mp_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>mp_number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">y</span><span class="special">,</span>
|
|
<span class="identifier">mp_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">mp_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>mp_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>mp_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">mp_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">mp_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">mp_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">mp_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">mp_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">mp_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">mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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="keyword">bool</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.mp_number.h1"></a>
|
|
<span><a name="boost_multiprecision.ref.mp_number.description"></a></span><a class="link" href="mp_number.html#boost_multiprecision.ref.mp_number.description">Description</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="keyword">bool</span> <span class="identifier">ExpressionTemplates</span> <span class="special">=</span> <span class="keyword">true</span><span class="special">></span>
|
|
<span class="keyword">class</span> <span class="identifier">mp_number</span><span class="special">;</span>
|
|
</pre>
|
|
<p>
|
|
Class <code class="computeroutput"><span class="identifier">mp_number</span></code> has two template
|
|
arguments:
|
|
</p>
|
|
<div class="variablelist">
|
|
<p class="title"><b></b></p>
|
|
<dl>
|
|
<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 true, then expression templates are enabled,
|
|
otherwise they are disabled.
|
|
</p></dd>
|
|
</dl>
|
|
</div>
|
|
<pre class="programlisting"><span class="identifier">mp_number</span><span class="special">();</span>
|
|
<span class="identifier">mp_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">mp_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>
|
|
</pre>
|
|
<p>
|
|
Type <code class="computeroutput"><span class="identifier">mp_number</span></code> is default
|
|
constructible, and both copy constructible and assignable from:
|
|
</p>
|
|
<div class="itemizedlist"><ul class="itemizedlist" 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.
|
|
</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 type that the Backend is constructible or assignable from.
|
|
</li>
|
|
</ul></div>
|
|
<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">mp_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">mp_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">mp_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">mp_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">mp_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">mp_number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">++();</span>
|
|
<span class="identifier">mp_number</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">--();</span>
|
|
<span class="identifier">mp_number</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span>
|
|
<span class="identifier">mp_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">mp_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">mp_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">mp_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">mp_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">mp_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">mp_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" type="disc">
|
|
<li class="listitem">
|
|
Another <code class="computeroutput"><span class="identifier">mp_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">
|
|
A builtin arithmetic type.
|
|
</li>
|
|
<li class="listitem">
|
|
An expression template derived from <code class="computeroutput"><span class="identifier">mp_number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">></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">mp_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">mp_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">mp_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">mp_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>
|
|
</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">mp_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_arithmetic</span><span class="special"><</span><span class="identifier">V</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" 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">
|
|
Zero for <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span>
|
|
<span class="special">==</span> <span class="identifier">other</span></code>
|
|
</li>
|
|
</ul></div>
|
|
<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>
|
|
<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.mp_number.h2"></a>
|
|
<span><a name="boost_multiprecision.ref.mp_number.non_member_operators"></a></span><a class="link" href="mp_number.html#boost_multiprecision.ref.mp_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="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" type="disc">
|
|
<li class="listitem">
|
|
An <code class="computeroutput"><span class="identifier">mp_number</span></code>.
|
|
</li>
|
|
<li class="listitem">
|
|
An expression template type derived from <code class="computeroutput"><span class="identifier">mp_number</span></code>.
|
|
</li>
|
|
</ul></div>
|
|
<p>
|
|
In addition, one of the two arguments may be a builtin arithmetic type.
|
|
</p>
|
|
<p>
|
|
The return type of these operators is either:
|
|
</p>
|
|
<div class="itemizedlist"><ul class="itemizedlist" 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">mp_number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span>
|
|
<span class="keyword">false</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.mp_number.h3"></a>
|
|
<span><a name="boost_multiprecision.ref.mp_number.swap"></a></span><a class="link" href="mp_number.html#boost_multiprecision.ref.mp_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">mp_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">mp_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.mp_number.h4"></a>
|
|
<span><a name="boost_multiprecision.ref.mp_number.iostream_support"></a></span><a class="link" href="mp_number.html#boost_multiprecision.ref.mp_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="keyword">bool</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">mp_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="keyword">bool</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">mp_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">mp_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.mp_number.h5"></a>
|
|
<span><a name="boost_multiprecision.ref.mp_number.non_member_standard_library_function_support"></a></span><a class="link" href="mp_number.html#boost_multiprecision.ref.mp_number.non_member_standard_library_function_support">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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_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>mp_number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">int</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>mp_number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">int</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>mp_number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>mp_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>mp_number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>mp_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>mp_number-or-expression-template-type</em></span><span class="special">&,</span> <span class="keyword">const</span> <span class="emphasis"><em>mp_number-or-expression-template-type</em></span><span class="special">&);</span>
|
|
</pre>
|
|
<p>
|
|
These functions all behave exactly as their standard library counterparts
|
|
do: their argument is either an instance of <code class="computeroutput"><span class="identifier">mp_number</span></code>
|
|
or an expression template derived from it; If the argument is of type <code class="computeroutput"><span class="identifier">mp_number</span><span class="special"><</span><span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">false</span><span class="special">></span></code>
|
|
then that is also the return type, otherwise the return type is an expression
|
|
template.
|
|
</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.
|
|
</p>
|
|
<h5>
|
|
<a name="boost_multiprecision.ref.mp_number.h6"></a>
|
|
<span><a name="boost_multiprecision.ref.mp_number.traits_class_support"></a></span><a class="link" href="mp_number.html#boost_multiprecision.ref.mp_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 mutiple 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> or
|
|
<code class="computeroutput"><span class="identifier">number_kind_fixed_point</span></code>.
|
|
</p>
|
|
<h5>
|
|
<a name="boost_multiprecision.ref.mp_number.h7"></a>
|
|
<span><a name="boost_multiprecision.ref.mp_number.integer_functions"></a></span><a class="link" href="mp_number.html#boost_multiprecision.ref.mp_number.integer_functions">Integer functions</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="keyword">bool</span> <span class="identifier">ExpressionTemplates</span><span class="special">></span>
|
|
<span class="keyword">bool</span> <span class="identifier">divide_qr</span><span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>mp_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>mp_number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">y</span><span class="special">,</span>
|
|
<span class="identifier">mp_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">mp_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>mp_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>mp_number-or-expression-template-type</em></span><span class="special">&</span> <span class="identifier">x</span><span class="special">);</span>
|
|
</pre>
|
|
<p>
|
|
Returns the index of the least significant bit that is set to 1.
|
|
</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">mp_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">mp_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">mp_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">mp_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">mp_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">mp_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">mp_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>mp_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>mp_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.
|
|
</p>
|
|
<h5>
|
|
<a name="boost_multiprecision.ref.mp_number.h8"></a>
|
|
<span><a name="boost_multiprecision.ref.mp_number.rational_number_functions"></a></span><a class="link" href="mp_number.html#boost_multiprecision.ref.mp_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>mp_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>mp_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>mp_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>mp_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.mp_number.h9"></a>
|
|
<span><a name="boost_multiprecision.ref.mp_number.boost_math_interoperability_support"></a></span><a class="link" href="mp_number.html#boost_multiprecision.ref.mp_number.boost_math_interoperability_support">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>mp_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>mp_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>mp_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>mp_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>mp_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.mp_number.h10"></a>
|
|
<span><a name="boost_multiprecision.ref.mp_number.std__numeric_limits_support"></a></span><a class="link" href="mp_number.html#boost_multiprecision.ref.mp_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">mp_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-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="../ref.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="backendconc.html"><img src="../../images/next.png" alt="Next"></a>
|
|
</div>
|
|
</body>
|
|
</html>
|