<title>Riemann Zeta Function</title>
<link rel="stylesheet" href="../../math.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
-<link rel="home" href="../../index.html" title="Math Toolkit 2.10.0">
+<link rel="home" href="../../index.html" title="Math Toolkit 2.11.0">
<link rel="up" href="../zetas.html" title="Zeta Functions">
<link rel="prev" href="../zetas.html" title="Zeta Functions">
<link rel="next" href="../expint.html" title="Exponential Integrals">
<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
<a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">zeta</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">z</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">class</span> <a class="link" href="../../policy.html" title="Chapter 19. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">></span>
-<a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">zeta</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">z</span><span class="special">,</span> <span class="keyword">const</span> <a class="link" href="../../policy.html" title="Chapter 19. Policies: Controlling Precision, Error Handling etc">Policy</a><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">class</span> <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">></span>
+<a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">zeta</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">z</span><span class="special">,</span> <span class="keyword">const</span> <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">&);</span>
<span class="special">}}</span> <span class="comment">// namespaces</span>
</pre>
type calculation rules</em></span></a>: the return type is <code class="computeroutput"><span class="keyword">double</span></code> if T is an integer type, and T otherwise.
</p>
<p>
- The final <a class="link" href="../../policy.html" title="Chapter 19. Policies: Controlling Precision, Error Handling etc">Policy</a> argument is optional and can
+ The final <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a> argument is optional and can
be used to control the behaviour of the function: how it handles errors,
- what level of precision to use etc. Refer to the <a class="link" href="../../policy.html" title="Chapter 19. Policies: Controlling Precision, Error Handling etc">policy
+ what level of precision to use etc. Refer to the <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">policy
documentation for more details</a>.
</p>
<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>
<a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">zeta</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">z</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">class</span> <a class="link" href="../../policy.html" title="Chapter 19. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">></span>
-<a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">zeta</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">z</span><span class="special">,</span> <span class="keyword">const</span> <a class="link" href="../../policy.html" title="Chapter 19. Policies: Controlling Precision, Error Handling etc">Policy</a><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">class</span> <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">></span>
+<a class="link" href="../result_type.html" title="Calculation of the Type of the Result"><span class="emphasis"><em>calculated-result-type</em></span></a> <span class="identifier">zeta</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">z</span><span class="special">,</span> <span class="keyword">const</span> <a class="link" href="../../policy.html" title="Chapter 20. Policies: Controlling Precision, Error Handling etc">Policy</a><span class="special">&);</span>
</pre>
<p>
Returns the <a href="http://mathworld.wolfram.com/RiemannZetaFunction.html" target="_top">zeta
function</a> of z:
</p>
-<p>
- <span class="inlinemediaobject"><img src="../../../equations/zeta1.svg"></span>
- </p>
-<p>
- <span class="inlinemediaobject"><img src="../../../graphs/zeta1.svg" align="middle"></span>
- </p>
-<p>
- <span class="inlinemediaobject"><img src="../../../graphs/zeta2.svg" align="middle"></span>
- </p>
+<div class="blockquote"><blockquote class="blockquote"><p>
+ <span class="inlinemediaobject"><img src="../../../equations/zeta1.svg"></span>
+
+ </p></blockquote></div>
+<div class="blockquote"><blockquote class="blockquote"><p>
+ <span class="inlinemediaobject"><img src="../../../graphs/zeta1.svg" align="middle"></span>
+
+ </p></blockquote></div>
+<div class="blockquote"><blockquote class="blockquote"><p>
+ <span class="inlinemediaobject"><img src="../../../graphs/zeta2.svg" align="middle"></span>
+
+ </p></blockquote></div>
<h5>
<a name="math_toolkit.zetas.zeta.h2"></a>
<span class="phrase"><a name="math_toolkit.zetas.zeta.accuracy"></a></span><a class="link" href="zeta.html#math_toolkit.zetas.zeta.accuracy">Accuracy</a>
zero error</a>.
</p>
<div class="table">
-<a name="math_toolkit.zetas.zeta.table_zeta"></a><p class="title"><b>Table 7.76. Error rates for zeta</b></p>
+<a name="math_toolkit.zetas.zeta.table_zeta"></a><p class="title"><b>Table 8.76. Error rates for zeta</b></p>
<div class="table-contents"><table class="table" summary="Error rates for zeta">
<colgroup>
<col>
precision, and GCC-7.1/Ubuntu for <code class="computeroutput"><span class="keyword">long</span>
<span class="keyword">double</span></code> and <code class="computeroutput"><span class="identifier">__float128</span></code>.
</p>
-<p>
- <span class="inlinemediaobject"><img src="../../../graphs/zeta__double.svg" align="middle"></span>
- </p>
-<p>
- <span class="inlinemediaobject"><img src="../../../graphs/zeta__80_bit_long_double.svg" align="middle"></span>
- </p>
-<p>
- <span class="inlinemediaobject"><img src="../../../graphs/zeta____float128.svg" align="middle"></span>
- </p>
+<div class="blockquote"><blockquote class="blockquote"><p>
+ <span class="inlinemediaobject"><img src="../../../graphs/zeta__double.svg" align="middle"></span>
+
+ </p></blockquote></div>
+<div class="blockquote"><blockquote class="blockquote"><p>
+ <span class="inlinemediaobject"><img src="../../../graphs/zeta__80_bit_long_double.svg" align="middle"></span>
+
+ </p></blockquote></div>
+<div class="blockquote"><blockquote class="blockquote"><p>
+ <span class="inlinemediaobject"><img src="../../../graphs/zeta____float128.svg" align="middle"></span>
+
+ </p></blockquote></div>
<h5>
<a name="math_toolkit.zetas.zeta.h3"></a>
<span class="phrase"><a name="math_toolkit.zetas.zeta.testing"></a></span><a class="link" href="zeta.html#math_toolkit.zetas.zeta.testing">Testing</a>
All versions of these functions first use the usual reflection formulas to
make their arguments positive:
</p>
-<p>
- <span class="inlinemediaobject"><img src="../../../equations/zeta3.svg"></span>
- </p>
+<div class="blockquote"><blockquote class="blockquote"><p>
+ <span class="inlinemediaobject"><img src="../../../equations/zeta3.svg"></span>
+
+ </p></blockquote></div>
<p>
The generic versions of these functions are implemented using the series:
</p>
-<p>
- <span class="inlinemediaobject"><img src="../../../equations/zeta6.svg"></span>
- </p>
+<div class="blockquote"><blockquote class="blockquote"><p>
+ <span class="inlinemediaobject"><img src="../../../equations/zeta6.svg"></span>
+
+ </p></blockquote></div>
<p>
When the significand (mantissa) size is recognised (currently for 53, 64
and 113-bit reals, plus single-precision 24-bit handled via promotion to
<p>
For 0 < z < 1 the approximating form is:
</p>
+<div class="blockquote"><blockquote class="blockquote"><p>
+ <span class="inlinemediaobject"><img src="../../../equations/zeta4.svg"></span>
+
+ </p></blockquote></div>
<p>
- <span class="inlinemediaobject"><img src="../../../equations/zeta4.svg"></span>
- </p>
-<p>
- For a rational approximation R(1-z) and a constant C.
+ For a rational approximation <span class="emphasis"><em>R(1-z)</em></span> and a constant
+ <span class="emphasis"><em>C</em></span>:
</p>
<p>
For 1 < z < 4 the approximating form is:
</p>
+<div class="blockquote"><blockquote class="blockquote"><p>
+ <span class="inlinemediaobject"><img src="../../../equations/zeta5.svg"></span>
+
+ </p></blockquote></div>
<p>
- <span class="inlinemediaobject"><img src="../../../equations/zeta5.svg"></span>
- </p>
-<p>
- For a rational approximation R(n-z) and a constant C and integer n.
+ For a rational approximation <span class="emphasis"><em>R(n-z)</em></span> and a constant
+ <span class="emphasis"><em>C</em></span> and integer <span class="emphasis"><em>n</em></span>:
</p>
<p>
For z > 4 the approximating form is:
</p>
+<div class="blockquote"><blockquote class="blockquote"><p>
+ <span class="serif_italic">ζ(z) = 1 + e<sup>R(z - n)</sup></span>
+ </p></blockquote></div>
<p>
- ζ(z) = 1 + e<sup>R(z - n)</sup>
- </p>
-<p>
- For a rational approximation R(z-n) and integer n, note that the accuracy
- required for R(z-n) is not full machine precision, but an absolute error
- of: ε/R(0). This saves us quite a few digits when dealing with large z, especially
- when ε is small.
+ For a rational approximation <span class="emphasis"><em>R(z-n)</em></span> and integer <span class="emphasis"><em>n</em></span>,
+ note that the accuracy required for <span class="emphasis"><em>R(z-n)</em></span> is not full
+ machine-precision, but an absolute error of: /ε<span class="emphasis"><em>R(0)</em></span>.
+ This saves us quite a few digits when dealing with large <span class="emphasis"><em>z</em></span>,
+ especially when ε is small.
</p>
<p>
Finally, there are some special cases for integer arguments, there are closed
forms for negative or even integers:
</p>
-<p>
- <span class="inlinemediaobject"><img src="../../../equations/zeta7.svg"></span>
- </p>
-<p>
- <span class="inlinemediaobject"><img src="../../../equations/zeta8.svg"></span>
- </p>
-<p>
- <span class="inlinemediaobject"><img src="../../../equations/zeta9.svg"></span>
- </p>
+<div class="blockquote"><blockquote class="blockquote"><p>
+ <span class="inlinemediaobject"><img src="../../../equations/zeta7.svg"></span>
+
+ </p></blockquote></div>
+<div class="blockquote"><blockquote class="blockquote"><p>
+ <span class="inlinemediaobject"><img src="../../../equations/zeta8.svg"></span>
+
+ </p></blockquote></div>
+<div class="blockquote"><blockquote class="blockquote"><p>
+ <span class="inlinemediaobject"><img src="../../../equations/zeta9.svg"></span>
+
+ </p></blockquote></div>
<p>
and for positive odd integers we simply cache pre-computed values as these
are of great benefit to some infinite series calculations.